[개발이야기#038] 내가 해보고 싶은 것 - 엑셀파일로 포스팅 큐레이션 전송하기 [postingcuration]
안녕하세요 가야태자 @talkit 입니다.
일단 이번회차 포스팅 큐레이션 마지막 글입니다.
오늘은 지난 번에 짜 놓은 엑셀파일을 이용한 포스팅 큐레이션 전송하기의 사용기 입니다.
참가상 전송하기
첫번째 모든 분들께 3STEEM씩 참가비 개념으로 드렸습니다. ^^
계정명 | 전송금액 | 메모 |
---|---|---|
banguri | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
dozam | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
epitt925 | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
etainclub | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
happycoachmate | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
june0620 | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
jungjunghoon | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
kimyg18 | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
maikuraki | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
parisfoodhunter | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
parkname | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
peterpa | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
powerego | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
shrah011 | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
ssglanders | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
tsf-leejgn | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
yoghurty | 3 | 포스팅큐레이션에 참여해주셔서 감사합니다. |
엑셀파일은 위와 같이 작성 했습니다.
import pandas as pd
from steem import Steem
from steem.transactionbuilder import TransactionBuilder
from steembase import operations
def send_steem_from_excel(file_path, steem_username, steem_private_key):
# 엑셀 파일 로드
df = pd.read_excel(file_path)
# 실제 Steem 네트워크용 Steem 인스턴스 생성
client = Steem(nodes=["https://api.steemit.com"], keys=[steem_private_key])
# 각 행에 대하여 스팀 전송
for index, row in df.iterrows():
account = row['계정명']
amount = row['전송금액']
memo = row['메모']
amount_str = f"{amount:.3f} STEEM" # 3자리 소수로 금액 포맷
# 수신자 계정 존재 확인
if client.get_account(account):
# Transaction 생성 및 전송
client.transfer(account, float(amount), 'STEEM', memo=memo, account=steem_username)
print(f"Transferred {amount_str} STEEM to {account} with memo: {memo}")
else:
print(f"Invalid recipient: {account}")
if __name__ == '__main__':
# 스팀 계정과 개인 액티브 키 설정
username = 'your_steemit_id'
private_key = 'your_activate_key'
# 엑셀 파일 경로
excel_path = '스팀전송내역.xlsx'
# 함수 실행
send_steem_from_excel(excel_path, username, private_key)
프로그램은 윈도우즈에서도 리눅스에서도 동작하는 send_steem_users_from_excel2.py
프로그램을 사용했습니다. ^^
conda activate steemit
python send_steem_users_from_excel2.py
엑셀 파일을 이제 작성해준 후에 그냥 위와 같이 명령어만 치면 참 편안하게 전송이 가능 합니다.
노력상 전송하기
이번에는 저도 정신이 없고 관련 주제에 관련된 것도 계속 글을 조금씩 읽기는 했는데 정신이 없어서 ^^
노력상으로 전송해드려고 합니다.
위에서 51스팀을 사용했습니다.
총 50 스팀을 제가 수집한 글을 기준으로 순위를 메기고 해당 글 갯수를 이용해서 드려 보겠습니다.
import duckdb
# DuckDB 연결
conn = duckdb.connect('steemit_auto_posting.db')
# 쿼리 실행
query = """
SELECT user_id, COUNT(*) as post_count
FROM post
WHERE main_tag = 'postingcuration'
GROUP BY user_id
ORDER BY post_count DESC;
"""
results = conn.execute(query).fetchall()
# 결과 출력
for row in results:
print(f'User ID: {row[0]}, Post Count: {row[1]}')
# 연결 종료
conn.close()
우선 계정별로 각 카운터를 구해 봅니다.
import duckdb
# DuckDB 연결
conn = duckdb.connect('steemit_auto_posting.db')
# 쿼리 실행
query = """
WITH user_counts AS (
SELECT user_id, COUNT(*) as post_count
FROM postings
WHERE main_tag = 'postingcuration' and user_id !='talkit' and user_id != 'goodpost-kr'
GROUP BY user_id
),
total_count AS (
SELECT COUNT(*) as total_posts
FROM postings
WHERE main_tag = 'postingcuration' and user_id !='talkit' and user_id != 'goodpost-kr'
)
SELECT uc.user_id, uc.post_count,
(uc.post_count * 100.0 / tc.total_posts) as percentage,
(uc.post_count / tc.total_posts) * 50 as steems
FROM user_counts uc, total_count tc
ORDER BY uc.post_count DESC;
"""
results = conn.execute(query).fetchall()
# 결과 출력
for row in results:
print(f'User ID: {row[0]}, Post Count: {row[1]}, Percentage: {row[2]:.2f}% , Steems: {row[3]:.3f}Steem')
# 연결 종료
conn.close()
50스팀 비율로 각 스팀을 얼마나 드려야 하는지 구해 봅니다. ^^
(steemit) C:\dev\pythonWorkspace\steemit>python user_counts_postingcuration.py
User ID: peterpa, Post Count: 43, Percentage: 14.14% , Steems: 7.072Steem
User ID: ssglanders, Post Count: 32, Percentage: 10.53% , Steems: 5.263Steem
User ID: june0620, Post Count: 31, Percentage: 10.20% , Steems: 5.099Steem
User ID: tsf-leejgn, Post Count: 29, Percentage: 9.54% , Steems: 4.770Steem
User ID: powerego, Post Count: 25, Percentage: 8.22% , Steems: 4.112Steem
User ID: happycoachmate, Post Count: 24, Percentage: 7.89% , Steems: 3.947Steem
User ID: parkname, Post Count: 16, Percentage: 5.26% , Steems: 2.632Steem
User ID: jungjunghoon, Post Count: 15, Percentage: 4.93% , Steems: 2.467Steem
User ID: kimyg18, Post Count: 14, Percentage: 4.61% , Steems: 2.303Steem
User ID: epitt925, Post Count: 14, Percentage: 4.61% , Steems: 2.303Steem
User ID: etainclub, Post Count: 13, Percentage: 4.28% , Steems: 2.138Steem
User ID: dozam, Post Count: 12, Percentage: 3.95% , Steems: 1.974Steem
User ID: yoghurty, Post Count: 11, Percentage: 3.62% , Steems: 1.809Steem
User ID: parisfoodhunter, Post Count: 8, Percentage: 2.63% , Steems: 1.316Steem
User ID: shrah011, Post Count: 7, Percentage: 2.30% , Steems: 1.151Steem
User ID: banguri, Post Count: 5, Percentage: 1.64% , Steems: 0.822Steem
User ID: maikuraki, Post Count: 5, Percentage: 1.64% , Steems: 0.822Steem
프로그램을 수행 하면 위와 같이 나옵니다. ^^
import duckdb
import pandas as pd
# DuckDB 연결
conn = duckdb.connect('steemit_auto_posting.db')
# 쿼리 실행
query = """
WITH user_counts AS (
SELECT user_id, COUNT(*) as post_count
FROM postings
WHERE main_tag = 'postingcuration' and user_id !='talkit' and user_id != 'goodpost-kr'
GROUP BY user_id
),
total_count AS (
SELECT COUNT(*) as total_posts
FROM postings
WHERE main_tag = 'postingcuration' and user_id !='talkit' and user_id != 'goodpost-kr'
)
SELECT uc.user_id,
(uc.post_count / tc.total_posts) * 52 as steems
FROM user_counts uc, total_count tc
ORDER BY uc.post_count DESC;
"""
# 쿼리 결과 가져오기
results = conn.execute(query).fetchall()
# 연결 종료
conn.close()
# DataFrame으로 변환
df = pd.DataFrame(results, columns=['계정명', '스팀수'])
# 소수점 세 자리에서 끊기
df['스팀수'] = df['스팀수'].round(3)
# '메모' 열 추가
df['메모'] = '포스팅 큐레이션 노력상 입니다.'
# 엑셀 파일로 저장
df.to_excel('포스팅큐레이션전송스팀.xlsx', index=False)
print("엑셀 파일이 '포스팅큐레이션전송스팀.xlsx'로 저장되었습니다.")
위 프로그램을 수행하면 아래와 같이 엑셀파일에 저장해 줍니다. ^^
다들 수고 하셨습니다.
이제 전송 프로그램을 약간 수정해서 전송 하겠습니다.
계정명 | 스팀수 | 메모 |
---|---|---|
peterpa | 7.355 | 포스팅 큐레이션 노력상 입니다. |
ssglanders | 5.474 | 포스팅 큐레이션 노력상 입니다. |
june0620 | 5.303 | 포스팅 큐레이션 노력상 입니다. |
tsf-leejgn | 4.961 | 포스팅 큐레이션 노력상 입니다. |
powerego | 4.276 | 포스팅 큐레이션 노력상 입니다. |
happycoachmate | 4.105 | 포스팅 큐레이션 노력상 입니다. |
parkname | 2.737 | 포스팅 큐레이션 노력상 입니다. |
jungjunghoon | 2.566 | 포스팅 큐레이션 노력상 입니다. |
epitt925 | 2.395 | 포스팅 큐레이션 노력상 입니다. |
kimyg18 | 2.395 | 포스팅 큐레이션 노력상 입니다. |
etainclub | 2.224 | 포스팅 큐레이션 노력상 입니다. |
dozam | 2.053 | 포스팅 큐레이션 노력상 입니다. |
yoghurty | 1.882 | 포스팅 큐레이션 노력상 입니다. |
parisfoodhunter | 1.368 | 포스팅 큐레이션 노력상 입니다. |
shrah011 | 1.197 | 포스팅 큐레이션 노력상 입니다. |
banguri | 0.855 | 포스팅 큐레이션 노력상 입니다. |
maikuraki | 0.855 | 포스팅 큐레이션 노력상 입니다. |
import pandas as pd
from steem import Steem
from steem.transactionbuilder import TransactionBuilder
from steembase import operations
def send_steem_from_excel(file_path, steem_username, steem_private_key):
# 엑셀 파일 로드
df = pd.read_excel(file_path)
# 실제 Steem 네트워크용 Steem 인스턴스 생성
client = Steem(nodes=["https://api.steemit.com"], keys=[steem_private_key])
# 각 행에 대하여 스팀 전송
for index, row in df.iterrows():
account = row['계정명']
amount = row['스팀수']
memo = row['메모']
amount_str = f"{amount:.3f} STEEM" # 3자리 소수로 금액 포맷
# 수신자 계정 존재 확인
if client.get_account(account):
# Transaction 생성 및 전송
client.transfer(account, float(amount), 'STEEM', memo=memo, account=steem_username)
print(f"Transferred {amount_str} STEEM to {account} with memo: {memo}")
else:
print(f"Invalid recipient: {account}")
if __name__ == '__main__':
# 스팀 계정과 개인 액티브 키 설정
username = 'your_steemit_id'
private_key = 'your_steemit_active_key'
# 엑셀 파일 경로
excel_path = '포스팅큐레이션전송스팀.xlsx'
# 함수 실행
send_steem_from_excel(excel_path, username, private_key)
위와 같이 수정하고 과감하게 실행 하겠습니다.
send_steem_users_from_excel3.py
저는 파일명을 위와 같이 다른 이름으로 저장 했습니다. ^^
python send_steem_users_from_excel3.py
위와 같이 수행 했습니다.
(steemit) C:\dev\pythonWorkspace\steemit>python send_steem_users_from_excel3.py
Transferred 7.355 STEEM STEEM to peterpa with memo: 포스팅 큐레이션 노력상 입니다.
Transferred 5.474 STEEM STEEM to ssglanders with memo: 포스팅 큐레이션 노력상 입니다.
Transferred 5.303 STEEM STEEM to june0620 with memo: 포스팅 큐레이션 노력상 입니다.
Transferred 4.961 STEEM STEEM to tsf-leejgn with memo: 포스팅 큐레이션 노력상 입니다.
Transferred 4.276 STEEM STEEM to powerego with memo: 포스팅 큐레이션 노력상 입니다.
Transferred 4.105 STEEM STEEM to happycoachmate with memo: 포스팅 큐레이션 노력상 입니다.
Transferred 2.737 STEEM STEEM to parkname with memo: 포스팅 큐레이션 노력상 입니다.
Transferred 2.566 STEEM STEEM to jungjunghoon with memo: 포스팅 큐레이션 노력상 입니다.
Transferred 2.395 STEEM STEEM to epitt925 with memo: 포스팅 큐레이션 노력상 입니다.
Transferred 2.395 STEEM STEEM to kimyg18 with memo: 포스팅 큐레이션 노력상 입니다.
Transferred 2.224 STEEM STEEM to etainclub with memo: 포스팅 큐레이션 노력상 입니다.
Transferred 2.053 STEEM STEEM to dozam with memo: 포스팅 큐레이션 노력상 입니다.
Transferred 1.882 STEEM STEEM to yoghurty with memo: 포스팅 큐레이션 노력상 입니다.
Transferred 1.368 STEEM STEEM to parisfoodhunter with memo: 포스팅 큐레이션 노력상 입니다.
Transferred 1.197 STEEM STEEM to shrah011 with memo: 포스팅 큐레이션 노력상 입니다.
Transferred 0.855 STEEM STEEM to banguri with memo: 포스팅 큐레이션 노력상 입니다.
Transferred 0.855 STEEM STEEM to maikuraki with memo: 포스팅 큐레이션 노력상 입니다.
수행 결과는 위와 같습니다.
결론
일단 내일(10월 21일) 까지 100스팀을 전송해야하기 때문에 우선 전송 하였습니다.
전송 방법은 편안하게 제가 작성해둔 프로그램으로 전송 했습니다. ^^
계산하는데 프로그램을 약간 수정 하긴 했지만, 엑셀파일만 있으면 편안하게 전송할 수 있어서 참 좋네요.
감사합니다.
Posted through the ECblog app (https://blog.etain.club)
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
우와~ 직접 계산하고 전송까지.... 멋지십니다
쪼금 알면 참 편할꺼 같은뎅...
꾸부러진건 영어요~ ㅜ ㅜ
포승팅 수고하셨습니다
저도 감사합니다.
그리고 @sharah011 님도 수고 하셨습니다.
개발은 쬐금 알면 정말 편안합니다. ^^
오우 굿입니다~!!
감사합니다. 피치아모님 댓글을 이제야 봤네요 ^^
코드를 따라하시면 피치아모님도 편안하게 하실 수 있을 겁니다.