[개발이야기#038] 내가 해보고 싶은 것 - 엑셀파일로 포스팅 큐레이션 전송하기 [postingcuration]

in #kr12 days ago

안녕하세요 가야태자 @talkit 입니다.

일단 이번회차 포스팅 큐레이션 마지막 글입니다.

오늘은 지난 번에 짜 놓은 엑셀파일을 이용한 포스팅 큐레이션 전송하기의 사용기 입니다.

참가상 전송하기

첫번째 모든 분들께 3STEEM씩 참가비 개념으로 드렸습니다. ^^

계정명전송금액메모
banguri3포스팅큐레이션에 참여해주셔서 감사합니다.
dozam3포스팅큐레이션에 참여해주셔서 감사합니다.
epitt9253포스팅큐레이션에 참여해주셔서 감사합니다.
etainclub3포스팅큐레이션에 참여해주셔서 감사합니다.
happycoachmate3포스팅큐레이션에 참여해주셔서 감사합니다.
june06203포스팅큐레이션에 참여해주셔서 감사합니다.
jungjunghoon3포스팅큐레이션에 참여해주셔서 감사합니다.
kimyg183포스팅큐레이션에 참여해주셔서 감사합니다.
maikuraki3포스팅큐레이션에 참여해주셔서 감사합니다.
parisfoodhunter3포스팅큐레이션에 참여해주셔서 감사합니다.
parkname3포스팅큐레이션에 참여해주셔서 감사합니다.
peterpa3포스팅큐레이션에 참여해주셔서 감사합니다.
powerego3포스팅큐레이션에 참여해주셔서 감사합니다.
shrah0113포스팅큐레이션에 참여해주셔서 감사합니다.
ssglanders3포스팅큐레이션에 참여해주셔서 감사합니다.
tsf-leejgn3포스팅큐레이션에 참여해주셔서 감사합니다.
yoghurty3포스팅큐레이션에 참여해주셔서 감사합니다.

엑셀파일은 위와 같이 작성 했습니다.

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'로 저장되었습니다.")

위 프로그램을 수행하면 아래와 같이 엑셀파일에 저장해 줍니다. ^^

다들 수고 하셨습니다.

이제 전송 프로그램을 약간 수정해서 전송 하겠습니다.

계정명스팀수메모
peterpa7.355포스팅 큐레이션 노력상 입니다.
ssglanders5.474포스팅 큐레이션 노력상 입니다.
june06205.303포스팅 큐레이션 노력상 입니다.
tsf-leejgn4.961포스팅 큐레이션 노력상 입니다.
powerego4.276포스팅 큐레이션 노력상 입니다.
happycoachmate4.105포스팅 큐레이션 노력상 입니다.
parkname2.737포스팅 큐레이션 노력상 입니다.
jungjunghoon2.566포스팅 큐레이션 노력상 입니다.
epitt9252.395포스팅 큐레이션 노력상 입니다.
kimyg182.395포스팅 큐레이션 노력상 입니다.
etainclub2.224포스팅 큐레이션 노력상 입니다.
dozam2.053포스팅 큐레이션 노력상 입니다.
yoghurty1.882포스팅 큐레이션 노력상 입니다.
parisfoodhunter1.368포스팅 큐레이션 노력상 입니다.
shrah0111.197포스팅 큐레이션 노력상 입니다.
banguri0.855포스팅 큐레이션 노력상 입니다.
maikuraki0.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)

Sort:  

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

우와~ 직접 계산하고 전송까지.... 멋지십니다
쪼금 알면 참 편할꺼 같은뎅...
꾸부러진건 영어요~ ㅜ ㅜ

포승팅 수고하셨습니다

저도 감사합니다.
그리고 @sharah011 님도 수고 하셨습니다.

개발은 쬐금 알면 정말 편안합니다. ^^

오우 굿입니다~!!

감사합니다. 피치아모님 댓글을 이제야 봤네요 ^^
코드를 따라하시면 피치아모님도 편안하게 하실 수 있을 겁니다.

Coin Marketplace

STEEM 0.16
TRX 0.17
JST 0.029
BTC 69437.28
ETH 2488.70
USDT 1.00
SBD 2.54