[개발이야기#004] 파이썬으로 스팀잇 리워드를 자동으로 클레임 해보자. 2탄

in kr •  7 months ago 

[개발이야기#003] 파이썬으로 스팀잇 리워드를 자동으로 클레임 해보자.

No. 003
2024.05.01.수 | Written by @talkit

    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

위 두 패키지를 설치하고 실행하시면 잘 됩니다.


오 일단 모양까지는 잘 되었습니다. ^^

무한 루프여서 오류가 있는 것 같습니다. ^^

로그를 읽어 보고 싶어서 두번째 메뉴를 실행할수가 없네요

저건 또 내일 코파일럿에게 물어 봐야겠습니다.

파이썬에도 쓰레드 기능이 있겠지요 ^^

로그도 봐야하고 쓰레드 중단해서 프로그램 자체도 꺼야 하는데 말입니다. ^^

여튼 무한 루프로 자동 클레임을 해줄꺼라 ^^

소소하게 들어오는 작은 리워들이 조금씩 쌓일것으로 생각하고 오늘은 이만 빠이 빠이 하겠습니다. ^^

감사합니다.




Layout provided by Steemit Enhancer hommage by ayogom


Posted through the ECblog app (https://blog.etain.club)
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:  

안녕하세요.
SteemitKorea팀에서 제공하는 'steemit-enhancer'를 사용해 주셔서 감사합니다. 개선 사항이 있으면 언제나 저에게 연락을 주시면 되고, 관심이 있으신 분들은 https://cafe.naver.com/steemitkorea/425 에서 받아보실 수 있습니다. 사용시 @응원해 가 포함이 되며, 악용시에는 모든 서비스에서 제외될 수 있음을 알려드립니다.

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.


안녕하세요.
이 글은 SteemitKorea팀(@ayogom)님께서 저자이신 @talkit님을 응원하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!