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

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

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  
@tmkor님 안녕하세요. 개수습 입니다. @julianpark님이 이 글을 너무 좋아하셔서, 저에게 홍보를 부탁 하셨습니다. 이 글은 @krguidedog에 의하여 리스팀 되었으며, 가이드독 서포터들로부터 보팅을 받으셨습니다. 축하드립니다!
  ·  7 years ago (edited)

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

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

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

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

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

멋져라! 감사합니다.

감사합니다. ^^

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

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

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

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

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

댓글 감사드립니다. ^^

리스팀 합니다!ㅎㅎ

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

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

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

@홍보해

Good

Thanks!

  ·  7 years ago (edited)

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

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

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

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

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