steem API로 자동 보팅 봇 만들어보기 with Python
오늘은 일전에 설치한 steem-python API를 이용해서 뭘 해볼까 하다가... 간단한 자동 보팅 봇을 만들어보았습니다. 간단한 toy example이지만, 나름 steem API를 골고루 쓰는 것이라 포스팅 해봅니다.
본 예제는 특정 ID의 게시글의 최신글에 보팅하는 가장 단순한 시나리오를 대상으로 합니다.
아래 내용이 구현된 소스코드는 https://github.com/taeminlee/steem.autovote 에서 확인하실 수 있습니다. 필요하신 분들 가져다가 쓰셔도 무방합니다.
자동 보팅 처리 흐름
자, 먼저 보팅을 위해서 우리가 스팀잇에서 하는 행동을 순차적으로 정리해 봅시다.
- 로그인
- 특정 ID의 첫번째 포스트 열람
- 업보트
저 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를 이용하면 간단한 구문으로 쉽게 자동화된 행동을 구현할 수 있습니다. 이를 이용한 다양한 비즈니스 모형이 우리 주변에도 많이 존재하고 있습니다. 이 가이드 문서가 새로운 비즈니스 모형을 만드시는 분들께 도움이 되길 바랍니다.
- 실행 가능한 소스코드는 https://github.com/taeminlee/steem.autovote 에서 확인 가능합니다. ^^
Leave steem API로 자동 보팅 봇 만들어보기 with Python to:
Read more #kr-dev posts
Best Posts From tmkor
We have not curated any of tmkor's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From tmkor
- 음원 분리 기법에 대하여.. (about singing voice separation)
- 아파트 실거래가 가격 예측 후기
- [IT용어] IPC (Inter-processing communication)
- [블록체인 기반 기술] 부인방지 (non-repudiation)
- [디자인패턴] 옵저버 패턴 (observer pattern)
- [디자인패턴] 팩토리 메소드 패턴 (Factory Method Pattern)
- loss, cost, objective function
- [ 공간 DB - 2 ] MySQL vs PostGIS (Postgresql) 범위 질의 성능 비교
- [SteemKR Discord] 스팀잇 태그 및 소모임 모니터링 도구 공개합니다.
- 스팀잇 댓글 모니터링 with Python
- [공간 DB-1] 위치 기반 서비스의 핵심 컴포넌트, 공간 DB (Spatial DataBase)
- [자동 보팅 봇 만들기-3] 화이트 리스트, 블랙 리스트! 키워드로 필터링하기 with Python
- 자동 보팅 딜레이 주기 with Python
- [STEEM PEACE] 최근 일련의 사태로 다운보팅을 받은 사람들을 위해..
- steem-python API 노드 변경법
- CPDAX 상장 예정 코인 3종 세트 : GTO, EOS, KNC 살펴보기
- steem API로 자동 보팅 봇 만들어보기 with Python
- 윈도우 10 환경에서 steem API 라이브러리 설치하기 with python
- 7 DAY BLACK&WHITE PHOTO CHALLENGE / @tmkor / DAY 7
- 7 DAY BLACK&WHITE PHOTO CHALLENGE / @tmkor / DAY 6