안녕하세요 @talkit.bank 입니다.
저는 구상만 하는 것을 별로 좋아 하지 않아서 ^^
오늘도 하나의 프로그램을 작성해 보겠습니다.
제가 운영하고 있는 계정들의 클레임을 현재 수동으로 하고 있는데 자동으로 진행 하겠습니다.
1시간마다 Claim해서 얼마 안되지만 SP의 경우 보팅 파워에 도움이 되게 하려고 합니다. ^^
CREATE TABLE steem_claim_rewards_log (
id INT AUTO_INCREMENT PRIMARY KEY,
claim_time DATETIME NOT NULL,
user_id VARCHAR(50) NOT NULL,
sbd DECIMAL(18, 6) NOT NULL,
steem DECIMAL(18, 6) NOT NULL,
sp DECIMAL(18, 6) NOT NULL
);
데이타로 저장해야 하기에 위와 같이 테이블을 생성 합니다.
from steem import Steem
from steem.account import Account
import pymysql
from datetime import datetime
# MySQL 연결 정보 설정
DB_HOST = "localhost" # MySQL 서버 주소
DB_USER = "MySQL아이디" # MySQL 사용자명
DB_PASSWORD = "your_password" # MySQL 비밀번호
DB_NAME = "your_database" # 데이터베이스 이름
# 계정 정보 설정
ACCOUNTS = [
{"user_id": "아이디1", "posting_key": "posting_key_for_talkit"},
{"user_id": "아이디2", "posting_key": "posting_key_for_talkit_bank"},
{"user_id": "아이디3", "posting_key": "posting_key_for_talkit_wallet"},
{"user_id": "아이디4", "posting_key": "posting_key_for_kayap"}
]
def save_to_mysql(user_id, sbd, steem_balance, sp):
"""MySQL에 데이터를 저장하는 함수"""
try:
connection = pymysql.connect(
host=DB_HOST,
user=DB_USER,
password=DB_PASSWORD,
database=DB_NAME,
charset="utf8mb4",
cursorclass=pymysql.cursors.DictCursor
)
with connection.cursor() as cursor:
sql = """
INSERT INTO steem_claim_rewards_log (claim_time, user_id, sbd, steem, sp)
VALUES (%s, %s, %s, %s, %s)
"""
cursor.execute(sql, (datetime.now(), user_id, sbd, steem_balance, sp))
connection.commit()
print(f"{user_id}의 보상 내역이 MySQL에 저장되었습니다.")
except Exception as e:
print(f"MySQL 저장 중 오류 발생: {str(e)}")
finally:
connection.close()
def claim_rewards():
"""모든 계정의 보상을 클레임하고 MySQL에 저장하는 함수"""
for account in ACCOUNTS:
try:
steem = Steem(keys=[account["posting_key"]])
acc = Account(account["user_id"], steem_instance=steem)
sbd = float(acc.get_balance("reward_sbd").amount)
steem_balance = float(acc.get_balance("reward_steem").amount)
vests = float(acc.get_balance("reward_vests").amount)
sp = float(steem.vests_to_sp(vests)) # Vests를 Steem Power로 변환
print(f"계정 {account['user_id']} - 현재 보상: SBD: {sbd}, STEEM: {steem_balance}, SP: {sp}")
if sbd > 0 or steem_balance > 0 or sp > 0:
print(f"{account['user_id']} 계정의 보상을 클레임합니다...")
acc.claim_reward_balance()
print(f"{account['user_id']} 계정의 보상 클레임 완료!")
save_to_mysql(account["user_id"], sbd, steem_balance, sp)
else:
print(f"{account['user_id']} 계정은 보상할 것이 없습니다.")
except Exception as e:
print(f"{account['user_id']} 계정에서 오류 발생: {str(e)}")
다중으로 가능하도록 코드를 만들었고,
위코드에서 아이디와 포스팅 키만 제대로 넣으시면 됩니다.
당연히 MySQL 관련 접속 정보도 수정해주십시오 ^^
저는 1시간에 한번씩 Claim 하도록 스케쥴러를 수정 해 두었습니다.
감사합니다.
Posted through the ECblog app (https://blog.etain.club)
Upvoted! Thank you for supporting witness @jswit.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit