[개발이야기#003] 파이썬으로 스팀잇 리워드를 자동으로 클레임 해보자.
Python
스팀잇 자동 클레임
오늘도 두서 없이 개발 글을 하나 적어 보겠습니다.
from steem import Steem
from steem.account import Account
# 사용자 이름과 개인 포스팅 키를 입력하세요
username = 'your_username'
posting_key = 'your_posting_key'
# Steem 객체를 생성하고 계정을 가져옵니다
s = Steem(keys=[posting_key])
account = Account(username)
# 현재 보상 잔액을 확인합니다
reward_balance = account["reward_steem_balance"]
print(f"Current reward balance: {reward_balance}")
# 리워드를 클레임합니다
s.claim_reward_balance(account=username)
# 클레임 후의 보상 잔액을 확인합니다
new_reward_balance = Account(username)["reward_steem_balance"]
print(f"New reward balance: {new_reward_balance}")
우선 어제 성공한 소스 코드 입니다. ^^
저는 어제 말씀 드렸지만, 저기다가 5분에 한번씩 자동으로 클레임 하는 코드를 추가할 예정입니다.
오늘도 제가 코딩하지 않습니다. ^^ 코딩은 코파일럿이 합니다.
저는 약간의 수정만 진행해 보겠습니다.
오늘은 글이 그렇게 길지는 않을 것 같습니다. ^^
import time
from steem import Steem
from steem.account import Account
# 사용자 이름과 개인 포스팅 키를 입력하세요
username = 'your_username'
posting_key = 'your_posting_key'
while True:
# Steem 객체를 생성하고 계정을 가져옵니다
s = Steem(keys=[posting_key])
account = Account(username)
# 현재 보상 잔액을 확인합니다
reward_balance = account["reward_steem_balance"]
print(f"Current reward balance: {reward_balance}")
# 리워드를 클레임합니다
s.claim_reward_balance(account=username)
# 클레임 후의 보상 잔액을 확인합니다
new_reward_balance = Account(username)["reward_steem_balance"]
print(f"New reward balance: {new_reward_balance}")
# 5분 동안 대기합니다 (300초)
time.sleep(300)
일단 무한 루프에 대한 코드를 추가해 보았습니다.
한번 실행해보겠습니다.
conda activate steemit
일단 어제 만들었던 conda 가상환경을 실행 합니다.
그리고,
python claim_steem_rewards.py
어제와 동일한 파일에 저장을 해서 저는 이렇게 실행 했습니다.
저코드에서 예외 처리가 없어서 ^^ 바로 오류나고 서버리네요
어떤 오류나면 아까 제가 자동 클레임을 실행해서 클레임할 Steem이 없는게 문제였습니다. ^^
그래서 코파일럿에게 또 질문을 합니다.
"오류나면 다음 루프로 넘겨줘"
저질문으로 받은 코드가 아래 코드 입니다.
import time
from datetime import datetime
from steem import Steem
from steem.account import Account
# 사용자 이름과 개인 포스팅 키를 입력하세요
username = 'your_username'
posting_key = 'your_posting_key'
while True:
try:
# Steem 객체를 생성하고 계정을 가져옵니다
s = Steem(keys=[posting_key])
account = Account(username)
# 현재 보상 잔액을 확인합니다
reward_balance = account["reward_steem_balance"]
print(f"{datetime.now()}: Current reward balance: {reward_balance}")
# 리워드를 클레임합니다
s.claim_reward_balance(account=username)
# 클레임 후의 보상 잔액을 확인합니다
new_reward_balance = Account(username)["reward_steem_balance"]
print(f"{datetime.now()}: New reward balance: {new_reward_balance}")
except Exception as e:
print(f"{datetime.now()}: An error occurred: {e}")
finally:
# 5분 동안 대기합니다 (300초)
time.sleep(300)
솔직히 질문 내용에 로그 찍을때 로그 시간도 찍어 줘를 추가 했습니다. ^^
(steemit) C:\dev\pythonWorkspace\steemit>python claim_steem_rewards.py
2024-05-02 23:42:23.198728: Current reward balance: 0.000 STEEM
Unexpected exception! Please report at https://github.com/steemit/steem-python/issues -- RPCError: assert_exception from api.steemit.com (Assert Exception:reward_steem.amount > 0 || reward_sbd.amount > 0 || reward_vests.amount > 0: Must claim something.) in broadcast_transaction
2024-05-02 23:42:24.832927: An error occurred: assert_exception from api.steemit.com (Assert Exception:reward_steem.amount > 0 || reward_sbd.amount > 0 || reward_vests.amount > 0: Must claim something.) in broadcast_transaction
위와 같이 잘 실행 됩니다.
루프가 한번 밖에 돌지는 않았지만요 ^^
잘 실행 될 것 같습니다.
import time
from datetime import datetime
from steem import Steem
from steem.account import Account
from PIL import Image
import pystray
# 사용자 이름과 개인 포스팅 키를 입력하세요
username = 'your_username'
posting_key = 'your_posting_key'
def log_message(message):
with open('log.txt', 'a') as f:
f.write(message + '\n')
def claim_rewards(icon, item):
while True:
try:
# Steem 객체를 생성하고 계정을 가져옵니다
s = Steem(keys=[posting_key])
account = Account(username)
# 현재 보상 잔액을 확인합니다
reward_balance = account["reward_steem_balance"]
log_message(f"{datetime.now()}: Current reward balance: {reward_balance}")
# 리워드를 클레임합니다
s.claim_reward_balance(account=username)
# 클레임 후의 보상 잔액을 확인합니다
new_reward_balance = Account(username)["reward_steem_balance"]
log_message(f"{datetime.now()}: New reward balance: {new_reward_balance}")
except Exception as e:
log_message(f"{datetime.now()}: An error occurred: {e}")
finally:
# 5분 동안 대기합니다 (300초)
time.sleep(300)
def view_logs(icon, item):
# 로그 파일을 읽고 출력합니다
with open('log.txt', 'r') as f:
print(f.read())
# 아이콘 이미지를 생성합니다. 실제 프로젝트에서는 적절한 이미지 파일을 로드해야 합니다.
image = Image.open('icon.png')
# 트레이 아이콘을 생성하고 메뉴를 설정합니다.
icon = pystray.Icon("name", image, "Steem Tray @talkit", menu=pystray.Menu(
pystray.MenuItem('Claim Rewards', claim_rewards),
pystray.MenuItem('View Logs', view_logs),
pystray.MenuItem('Exit', lambda icon, item: icon.stop())
))
# 트레이 아이콘을 실행합니다.
icon.run()
위 코드는 제가 궁극적으로 원하는 프로그램 입니다.
윈도우즈 시스템 트레이에서 백그라운드로 해당 프로그램이 실행되기를 원하는데
코파일럿에게 짜달라고 했더니 잘 짜줍니다. ^^
미쳤습니다. 코파일럿 ^^
pip install Image
pip install pystray
python claim_steem_rewards.py
위 두 패키지를 설치하고 실행하시면 잘 됩니다.
오 일단 모양까지는 잘 되었습니다. ^^
무한 루프여서 오류가 있는 것 같습니다. ^^
로그를 읽어 보고 싶어서 두번째 메뉴를 실행할수가 없네요
저건 또 내일 코파일럿에게 물어 봐야겠습니다.
파이썬에도 쓰레드 기능이 있겠지요 ^^
로그도 봐야하고 쓰레드 중단해서 프로그램 자체도 꺼야 하는데 말입니다. ^^
여튼 무한 루프로 자동 클레임을 해줄꺼라 ^^
소소하게 들어오는 작은 리워들이 조금씩 쌓일것으로 생각하고 오늘은 이만 빠이 빠이 하겠습니다. ^^
감사합니다.
Posted through the ECblog app (https://blog.etain.club)
안녕하세요.
SteemitKorea팀에서 제공하는 'steemit-enhancer'를 사용해 주셔서 감사합니다. 개선 사항이 있으면 언제나 저에게 연락을 주시면 되고, 관심이 있으신 분들은 https://cafe.naver.com/steemitkorea/425 에서 받아보실 수 있습니다. 사용시 @응원해 가 포함이 되며, 악용시에는 모든 서비스에서 제외될 수 있음을 알려드립니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
안녕하세요.
이 글은 SteemitKorea팀(@ayogom)님께서 저자이신 @talkit님을 응원하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit