steem API로 자동 보팅 봇 만들어보기 with Python

20180105 python title.png

안녕하세요 @tmkor입니다.

오늘은 일전에 설치한 steem-python API를 이용해서 뭘 해볼까 하다가... 간단한 자동 보팅 봇을 만들어보았습니다. 간단한 toy example이지만, 나름 steem API를 골고루 쓰는 것이라 포스팅 해봅니다.

본 예제는 특정 ID의 게시글의 최신글에 보팅하는 가장 단순한 시나리오를 대상으로 합니다.

아래 내용이 구현된 소스코드는 https://github.com/taeminlee/steem.autovote 에서 확인하실 수 있습니다. 필요하신 분들 가져다가 쓰셔도 무방합니다.

자동 보팅 처리 흐름

자, 먼저 보팅을 위해서 우리가 스팀잇에서 하는 행동을 순차적으로 정리해 봅시다.

  1. 로그인
  2. 특정 ID의 첫번째 포스트 열람
  3. 업보트

저 4가지에 해당하는 함수를 구현하면 됩니다.

1. 로그인

steem-python API는 꽤나 직관적으로 구성되어 있습니다. 로그인은 아래 2줄의 코드로 구현 가능합니다.

from steem import Steem
user = Steem(keys=["POST_KEY"])
  • 첫번째 줄은 라이브러리를 사용하기 위한 구문이고,
  • 두번째 줄은 posting key를 이용해서 로그인 하는 부분입니다.
    • 우리가 업보트 하기위한 최소한의 권한은 posting key 이므로, 요것만 넣으셔도 됩니다.
  • 로그인이 완료되면 사용자 개체가 반환됩니다.

2. 특정 ID의 첫번째 포스트 열람

from steem.blog import Blog
blog = Blog("TARGET_USER_ID")
post = next(blog)
post_json = post.export()
  • 첫번째 줄은 특정 ID의 블로그를 접근하는 라이브러리를 import 하는 구문입니다.
  • 두번째 줄은 보팅을 할 대상 ID의 블로그 객체를 가져오는 구문입니다.
  • 세번째 줄은 첫번째 포스트 객체를 가져오는 구문입니다.
    • 블로그 객체의 경우 포스트를 가져오는 generator로 next가 호출 될 때마다 최신 순으로 하나씩 포스트를 yield합니다.
  • 네번째 줄은 포스트 내용을 포스트 객체에서 읽는 구문입니다. 우리가 steemd에서 자주보는 그 내용을 여기서 볼 수 있습죠!

3. 업보트

postId = post['identifier']
user.commit.vote(postId, weight, "USER_ID")
  • 먼저 포스트의 identifier를 가져옵니다. identifier는 글의 고유 주소로, 우리가 보고 있는 글의 주소창에 나와있는 URL이라 보시면 됩니다.
  • 앞서 로그인에서 받은 사용자 개체의 commit.vote 함수를 이용해서 voting 하면 됩니다.
    • 인자는 3개로, voting할 포스트의 identifier, 업보트의 비중(100 = 풀봇, -100=너 나랑 싸우자), 보팅하는 사용자의 ID 입니다.

결론

스팀 API를 이용하면 간단한 구문으로 쉽게 자동화된 행동을 구현할 수 있습니다. 이를 이용한 다양한 비즈니스 모형이 우리 주변에도 많이 존재하고 있습니다. 이 가이드 문서가 새로운 비즈니스 모형을 만드시는 분들께 도움이 되길 바랍니다.

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now