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

in #kr-dev3 years ago (edited)

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

Sort:  
@tmkor님 안녕하세요. 개수습 입니다. @julianpark님이 이 글을 너무 좋아하셔서, 저에게 홍보를 부탁 하셨습니다. 이 글은 @krguidedog에 의하여 리스팀 되었으며, 가이드독 서포터들로부터 보팅을 받으셨습니다. 축하드립니다!

-100 = 너 나랑 싸우자 ㅎㅎㅎㅎ 재밌어요~! 감사합니다~

아!! 파이썬으로 하고 싶다. 진도가 잘 나가시는군요. 근데 내가 원하는 금액으로 upvote하는 계산식을 못 찾았어요. 혹시 아시나요?

파이썬 언어 특성상 적은 코드로 표현이 가능해서 그런 것 같습니다. ^^;
흠, 원하는 금액으로 upvote하는건 꽤 여러단계의 연산이 필요하겠네요. ;ㅅ; 요건 서베이 해보고 알려드릴께요~

스팀파이는 사용하기 편하게 되어있는것 같군요. 저는 자바 개발자라 steemj를 좀 써봤는데 생각보다 좀 불편합니다 ㅎㅎ

스팀파이 꽤 편합니다~ 근데 노드가 뻗어서인지 지금은 잘 안되네요... ;ㅅ;

멋져라! 감사합니다.

감사합니다. ^^

api도 구현이 잘되있었군요. 나중에 스팀잇 관련 좋은 아이디어 나오면 한번 써봐야겠네요

네, 몇번 써보았는데 꽤나 원하는대로 조물딱 거릴 수 있습니다. 다만, 명령어당 실행 딜레이가 있는지라, 연산량이 많은 작업을 수행하시려면 비동기를 쓰거나, 자체 노드를 구축해야 될 것 같습니다.

멋지네요 저도 따라서 해봐야겠네요 ^~^ 보팅 팔로우 합니다 감사합니다

댓글 감사드립니다. ^^ 저도 팔로우 할께요~ 개발 글 자주 올려주세요 'ㅅ')/

글 잘봤습니다!! 팔로우했습니다~ 맞팔부탁드려요 ^O^

댓글 감사드립니다. ^^

리스팀 합니다!ㅎㅎ

리스팀 감사드립니다! ^^

팔로우 감사합니다 ^^ 좋은글 많이 올려주시는거 많이 참고할게요!

댓글 감사드립니다. 게임 리뷰.. 기대하겠습니다.

좋은글 감사합니당.!! 코드 참고해서 작성했습니당.!!
https://steemit.com/kr-dev/@recrack/python-steemit-1

감사합니다!
짱짱맨을 위해서 좋은 일을 해주시고 계시네요 ^^ 화이팅입니다!
팔로우 하였습니다.

포스팅 키는 패스워드 말인가요?

스팀잇의 패스워드는 권한에 따라 4가지로 분류됩니다. 댓글이나, 보팅만 할 수 있는 패스워드가 포스팅 키 입니다. ^^

3개월전 포스팅에 질문드려도 될까요?
위에 내용을 응용해서
특정 포스팅에 댓글 주소를 얻고 싶고
그걸 특정계정(봇)에게 메모로 그 댓글 주소를 보내고 싶습니다