Posts

Showing posts from October, 2023

jsup/avle 보팅 코드 갱신 - 1일1포스팅 강박에서 벗어나기

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/jsup-avle-1-1 안녕하세요. @joviansummer입니다. @jsup과 @avle의 보팅 코드를 갱신하여 적용하였습니다. 검토는 상당히 오래전부터 진행해 왔습니다만, 최근에 구체적인 설계 방향이 잡히고 기술적으로 어떻게 할 것인지에 대해서도 결정이 되면서 생각보다 빠르게 코드 수정이 진행되었습니다. 새로운 기능은 신청자에 대해서 포스팅이 아니라 댓글에도 보팅을 하는 것입니다. 매일 포스팅하는 것이 부담스럽고 힘들다면 댓글을 달면 됩니다. 당연히 1일1포스팅보다 1일1댓글이 훨씬 쉽고, 댓글을 많이 쓴다고 나쁠 것도 없다고 생각됩니다. 임대 보팅을 받기 위해 억지로 매일 포스팅하는 것은 본인에게도 괴로운 일이고 포스팅 자체도 결국 저품질화될 가능성이 큽니다. 매일 포스팅하는 것이 즐거운 사용자들도 있겠습니다만, 단지 보팅 때문에 억지로 쥐어 짜서 하루에 하나씩 힘들게 포스팅하거나 사실상 내용이 없다시피 한 포스팅을 하는 사용자들도 있는 것이 현실입니다. 보팅을 받아야 한다는 압박감으로 매일 억지로 포스트를 쓰기 시작하면서 스팀잇은 재미 없고 따분한 곳이 되어 갑니다. 게다가 스팀잇의 트렌딩 페이지는 사실상 대량의 임대 셀프 보팅을 받는 사용자의 포스팅을 모아놓은 공간처럼 되어 있어, 이대로 계속 가면 SNS 본연의 매력은 상실하고 코인 채굴장 그 이상도 이하도 아니게 될까 우려되는 측면도 있습니다. 댓글 보팅이 이런 문제를 완화하는데 조금이나마 기여할 수 있지 않을까 생각됩니다. 대상: @jsup 또는 @avle에 스팀파워를 임대하여 보팅을 받고 있는 계정 신청 방법: @jsup 또는 @joviansummer의 최근 포스트에 "댓글 보팅을 신청합니다"라는 내용으로 댓글을 써 주시면 됩니다. 제가 확인하고 서버에 등록하면 다음날부터 해당 계정은 포스트/댓글 관계 없이 그날 처음 작성하...

파이썬 beem에서 특정 계정의 스팀파워 임대 정보 조회하기

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/42731a-beem 파이썬 beem에서 스팀파워(SP) 임대 정보를 조회하는 방법입니다. Account 객체의 get_vesting_delegations() 함수를 사용하며, 가져오는 결과의 형식은 리스트(list)입니다. 즉, 어느 계정에 얼만큼을 임대했는지가 리스트 형식으로 생성됩니다. 예제는 아래와 같습니다. from beem import Steem from beem.account import Account node_list = ["https://api.steemit.com"] steem_id = 'joviansummer' s = Steem(node=node_list) a = Account(steem_id, blockchain_instance=s) deleg_list = a.get_vesting_delegations() print(deleg_list) [{'id': 1665269, 'delegator': 'joviansummer', 'delegatee': 'avle', 'vesting_shares': {'amount': '18247110554', 'precision': 6, 'nai': '@@000000037'}, 'min_delegation_time': '2022-04-06T12:21:45'}, {'id': 1601704, 'delegator': 'joviansummer', 'delegatee': 'jsup', 'vesting_shares': {'amount': '90471065631...

파이썬 beem에서 스팀파워 임대

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/d37145-beem 파이썬 beem을 이용해서 스팀파워(SP)를 임대할 수 있습니다. 액티브키를 필요로 하며, Account 객체의 delegate_vesting_shares() 함수를 이용합니다. from beem import Steem from beem.account import Account steem_id = 'joviansummer' active_key = '5XXXXx....' target_id = 'jsup' node_list = ["https://api.steemit.com"] s = Steem(node=node_list, keys=[active_key]) a = Account(steem_id, blockchain_instance=s) # 100sp 임대 sp = 100.0 # 100sp를 VEST로 변환 vests = s.sp_to_vests(sp) # deletage_vesting_shares() 함수에 사용할 인자(문자열) vests_str = str(vests) + ' VESTS' # joviansummer 계정에서 jsup으로 100sp 임대 a.delegate_vesting_shares(target_id, vests_str, account=steem_id) 스팀파워를 VEST값으로 전환한 후 문자열(string)로 변환해서 delegate_vesting_shares() 함수에 사용한다는 점에 유의해야 합니다. 예를 들어 100sp가 180899.604437VESTS라면 함수에 사용할 문자열은 '180899.604437 VESTS' 이렇게 됩니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://ste...

파이썬에서 현재 시각을 시간대(timezone) 정보와 함께 datetime 객체로 가져오기

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/timezone-datetime 파이썬에서 현재 시각을 datetime 객체로 가져올 때 시간대(timezone) 정보를 포함하는 방법입니다. 우선 시간대 정보 없이 현재 시각을 가져오려면 아래와 같이 할 수 있습니다. import datetime now = datetime.datetime.now() 위와 같이 하면, 현재 시각 정보를 가져오긴 하지만 시간대에 대한 정보는 없는 상태입니다. 만약 시간대 정보를 포함하고 싶다면 아래의 예시처럼 now() 함수에 인자(argument)를 지정해 주어야 합니다. 한국시간(GMT+9)을 사용하는 경우의 예제 코드는 아래와 같습니다. import datetime import pytz tz_info = pytz.timezone('Asia/Seoul') now_with_tz = datetime.datetime.now(tz_info) @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

리눅스 grep에서 검색된 문자열이 있는 파일명 표시

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/grep 예전에 특정 계정의 포스트를 캐쉬(cache)로 저장하고 포스트 내용을 검색하는 방안을 검토했었는데, grep을 활용해서 구현할 수 있을 것 같아서 기록합니다. 어느 캐쉬 파일에 어느 문자열이 있는지 파악을 할 수 있는 간편한 방법이 될 수 있을 것 같기 때문입니다. jSTEEM 프로젝트에 포스트 검색 기능 추가 검토 - 2 리눅스에서 문자열 검색을 하는 명령어인 grep에서 찾고자 하는 문자열이 어느 파일에 있는지 표시할 수 있습니다. -H 옵션을 추가해 주면 됩니다. # txt 파일에서 문자열 "abc"를 검색하고 어느 파일에 있는지 표시 grep -H "abc" *.txt 리눅스에서 위와 같이 입력할 경우 결과는 아래와 같은 형태로 출력됩니다. 파일명:문자열 형태입니다. my_text.txt:abcdefg 당장에 뭘 작업한다기 보다는 가능성 검토 차원입니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

파이썬에서(list) 정렬(sort) - 2 (sorted와 sort)

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/list-sort-2-sorted-sort 파이썬에서 sorted() 함수를 이용해서 리스트(list)를 정렬하는 방법은 이전 포스팅에 있습니다. 아래의 링크입니다. 파이썬에서 리스트(list) 정렬(sort) 위의 포스트에 정리한 sorted() 함수는 리스트를 인자(argument)로 받아서 정렬된 결과를 반환합니다. 따라서 결과를 할당할 별도의 변수를 지정해 주면 됩니다. x = [1, 3, 5, -1, 0] x_sorted = sorted(x) 이와 별도로, 리스트 자체에서 sort() 함수를 제공하고 있어서 이를 사용할 수도 있습니다. 이 경우에는 해당 리스트 자체의 순서가 변경되어 정렬된 상태가 됩니다. x = [1, 3, 5, -1, 0] print(x) [1, 3, 5, -1, 0] 위의 예시에서 아래와 같이 오름차순으로 정렬을 할 수 있습니다. # 리스트 x의 원소를 정렬 x.sort() print(x) [-1, 0, 1, 3, 5] 내림차순 정렬은 아래와 같이 합니다. x.sort(reverse=True) print(x) [5, 3, 1, 0, -1] @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 Posted through the AVLE Dapp ( https://avle.io )

파이썬에서 시간 문자열과 datetime 객체 전환 - strptime(), strftime()

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/datetime-strptime-strftime 파이썬에서 시간 문자열을 datetime 객체로 변환하는 방법입니다. strptime() 함수를 사용합니다. 예제를 보면 금방 알 수 있습니다. import datetime import pytz # 2022년 7월 11일 20시 30분 33초(문자열) dt_str = "2022.07.11 20:30:33" # dt_str로부터 datetime 객체를 만들어 dt에 할당 dt = datetime.datetime.strptime(dt_str, "%Y.%m.%d %H:%M:%S") # dt에 시간대 정보를 설정해서 dt_local에 할당(한국 시간, GMT+9) tz_info = pytz.timezone('Asia/Seoul') dt_local = dt.astimezone(tz_info) 반대로 datetime 객체로부터 시간 문자열을 만드는 방법은 strftime() 함수를 사용합니다. dt_local_str = dt_local.strftime("%Y.%m.%d %H:%M:%S") print(dt_local_str) 2022.07.11 20:30:33 @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

파이썬 beem에서 계정 트랜잭션 이력 조회할 때 요청 1회당 조회수 제한(batch_size)

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/8df222-beem-1-batchsize 파이썬 beem에서 Account 객체의 history() 함수를 이용해서 계정 트랜잭션 이력을 조회할 때, API노드에 한번 요청을 할 때 몇개의 응답을 가져올 것인지를 제한할 수 있습니다. 우선 트랜잭션 이력 조회 방법에 대한 내용은 이전 포스팅을 참고하시기 바랍니다. 아래의 링크입니다. 파이썬 beem에서 계정 트랜잭션 이력 조회(범위 지정) 위의 포스트에 있는 예제 코드를 다시 적어 보면 아래와 같습니다. from beem import Steem from beem.account import Account steem_node = ["https://api.steemit.com"] steem = Steem(node=steem_node) account = Account('joviansummer', blockchain_instance=steem) history_data = account.history(start=1, stop=5, use_block_num=False) for record in history_data: print(record) 위의 예시에서 history()의 인자에 batch_size 옵션을 추가해 주면 됩니다. 예를 들어 위의 예시에서 첫번째 트랜잭션(start=1)부터 200번째 트랜잭션(stop=200)까지 조회를 할 때 batch_size를 100으로 지정하면, 한번에 100개씩 가져오게 되므로 API노드로 전송되는 조회 요청은 2번이 될 것입니다. history_data = account.history(start=1, stop=200, batch_size=100, use_block_num=False) 굳이 이 batch_size를 지정해야 하는 이유는, 최근에 스팀잇의 공식 API노드에서 계정 이력(acco...

스팀잇 API 노드의 계정 이력(account history) 조회에 문제가 있는 듯합니다

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/api-account-history 스팀잇 API 노드인 https://api.steemit.com의 계정 이력(account history) 조회에 문제가 있는 것 같습니다. 계정 상태정보 조회 등은 제대로 응답이 오는데 이력 조회가 제대로 되지 않고 있습니다. 파이썬 beem 기준으로 Account 객체의 history() 함수를 사용하면서 조금 긴 범위(예를 들어 하루)로 조회 요청을 보내면 제대로 동작하지 않고 예외가 발생하네요. 서버에 문제가 있는 것인지 아니면 일부러 제한을 가해 놓은 것인지 모르겠습니다. 계정 이력 조회는 스팀파워 임대 이력 , 큐레이션 보상 이력 등을 파악할 때 필요하기 때문에 이 기능이 제대로 동작하지 않는 것은 문제가 있다고 생각됩니다. 스팀 관련 서비스가 제대로 동작하기 위해서는 안정적인 API 노드가 필수적인데 얼마전에는 노드 자체가 불안정한 모습을 보이기도 하고, 안정성 측면에서 아쉬운 부분입니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

파이썬 beem에서 다음번 파워다운 시점 확인

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/7qttz4-beem 파이썬 beem에서 어떤 계정이 파워다운을 하고 있을 경우, 다음번 파워다운이 언제인지 파악하는 방법입니다. 파워다운을 하면 4주에 걸쳐 1주에 파워다운 총량의 1/4씩 스팀파워가 스팀으로 전환됩니다. 따라서 다음번 전환이 언제 이루어질 것인지를 확인할 수 있습니다. Account 객체에서 조회할 수 있으며, datetime 객체로 가져옵니다. 예제 코드는 아래와 같습니다. from beem import Steem from beem.account import Account steem_node = ["https://api.steemit.com"] steem = Steem(node=steem_node) account = Account('joviansummer', blockchain_instance=steem) # 다음번 파워다운 시점을 변수 nvw에 할당(datetime 객체) nvw = account['next_vesting_withdrawal'] print(nvw) Account 객체의 "next_vesting_withdrawal" 키(key)에서 조회할 수 있으며 값은 UTC 기준입니다. 시간대(timezone) 정보를 추가하고자 한다면 아래와 같이 UTC로 추가하면 됩니다. import pytz tz_info = pytz.timezone('UTC') # 앞의 nvw에 시간대 정보를 추가하여 변수 nvw_utc에 할당 nvw_utc = nvw.astimezone(tz_info) 만약 파워다운하고 있지 않다면, 다음번 파워다운 시점은 1969년 12월 31일 23시 59분 59초로 표시됩니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사...

파이썬에서 작업 실행에 시간제한(timeout) 설정하기 - signal.alarm()

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/timeout-signalalarm 파이썬에서 특정 작업을 실행할 때 일정 시간내에 완료되지 않으면 예외를 발생시킬 수 있습니다. 어떤 작업이 대해 시간을 제한하고 싶을 때 사용할 수 있겠습니다. try/except 구문과 signal.alarm() 함수를 이용합니다. 예제 코드는 아래와 같습니다. import time import signal import traceback # 알람 처리 함수 def alarm_handler(signum, frame): # 예외 발생시키기 raise Exception("시간 초과") # 루프 함수 (n초 동안 대기) def loop_func(num): for i in range(num): print(i) time.sleep(1) # alarm signal이 발생할 경우 처리할 함수 지정 signal.signal(signal.SIGALRM, alarm_handler) try: # 5초 동안 작업이 완료되지 않으면 예외 발생 signal.alarm(5) # 함수 호출 loop_func(10) except: print("예외 발생") traceback.print_exc # 시간 제한 해제 signal.alarm(0) 위의 예시를 보면 5초안에 작업이 완료되지 않으면 예외를 발생하도록 한 후, loop_func 함수를 호출하여 10초 동안 대기하도록 했습니다. 따라서 5초후에 예외가 발생하게 됩니다. 만약 예를 들어 3초 동안 대기하도록 loop_func 함수의 인자를 3으로 지정하여 호출했다면 예외 발생이 없이 정상적으로 완료될 것입니다. 여기서 유의할 점이 있는데, signal.alarm()에 대한 처리 함수를 만들고 이 함수를 이용해서 예외를 발생시키도록 해 주어야 합니다. 위의 코드에서는 a...

파이썬 beem에서 알림(notification) 가져오기

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/beem-notification 파이선 beem에서 계정이 받은 알림을 확인할 수 있습니다. Account 객체의 get_notifications() 함수를 이용합니다. 예제 코드는 아래와 같습니다. from beem import Steem from beem.account import Account steem_nodes = ['https://api.steemit.com'] steem_id = 'joviansummer' steem = Steem(node=steem_nodes) account = Account(steem_id, blockchain_instance=steem) # 알림 가져오기(최근 30개) n_list = account.get_notifications(limit=30) for n_item in n_list: print(n_item) 위의 예시는 @joviansummer 계정이 받은 알림중에 최근 30개를 가져온 예시입니다. 최대 100개까지 가져올 수 있으며, 리스트(list) 형식으로 받게 됩니다. 리스트의 각 원소가 알림 정보가 되며, 이는 아래의 예시처럼 딕셔너리(dict) 형식입니다. {'id': 48809675, 'type': 'mention', 'score': 58, 'date': datetime.datetime(2022, 6, 20, 14, 3, 24, tzinfo= ), 'msg': '@jsup mentioned you', 'url': '@jsup/jsup-100sp'} 만약 읽지 않은 알림만 가져오려면 아래와 같이 only_unread값을 설정합니다. n_list = account.get_notifications(onl...

파이썬 beem에서 인터넷 회선 또는 API 노드 불안정성에 대한 대응 - 3

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/beem-api-3 어제 포스팅했던 내용에서 이어지는 내용입니다. 파이썬 beem에서 인터넷 회선 또는 API 노드 불안정성에 대한 대응 - 2 API노드에 접속이 되지 않을 경우 다른 API노드로 전환을 할 때, 노드 리스트(list)에 대해 for 반복문을 쓰지 않아도 됩니다. 코드가 좀 더 간단해 질 수 있습니다. import time from beem import Steem from beem.account import Account steem_nodes = ["https://api.steemit.com", "https://api.justyy.com"] while True: try: s = Steem(node=steem_nodes, num_retries=2) a = Account('joviansummer', blockchain_instance=s) print("연결 성공") break except: print("예외 발생. 1분후 재시도합니다.") time.sleep(60) Steem() 객체를 사용할 때, 재시도 회수(num_retries)를 기본값(-1, 무한)을 사용하지 않고 특정값으로 지정해 줍니다. 여기서는 2회로 지정했습니다. 재시도 회수를 초과하면 노드 리스트의 다른 노드로 접속을 시도합니다. 코드는 좀 더 간단해지고, 대신 어느 노드에 접속했는지 명시적으로 알기는 어렵습니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비...

파이썬 beem에서 인터넷 회선 또는 API 노드 불안정성에 대한 대응 - 2

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/beem-api-2 여기에 정리하는 내용은 이전에 포스팅했던 대응 방안의 확장입니다. 우선 이전에 정리했던 내용은 아래의 링크입니다. 파이썬 beem에서 인터넷 회선 또는 API 노드 불안정성에 대한 대응 위의 포스트에서는 접속이 안될 경우에 대비해서 무한 루프와 try/except 구문으로 계속 재시도하는 코드 예시를 제시했습니다. 여기서는 스팀잇 공식 API노드(api.steemit.com)에 접속시도를 2회 이상 해도 실패할 경우 다른 비공식 API노드에 접속을 시도하는 예시를 생각해 보겠습니다. 아래의 코드입니다. import time from beem import Steem from beem.account import Account steem_nodes = ["https://api.steemit.com", "https://api.justyy.com"] connection_flag = 0 while True: for node_url in steem_nodes: try: s = Steem(node=node_url, num_retries=2, timeout=90) a = Account('joviansummer', blockchain_instance=s) print("연결 성공:", node_url) connection_flag = 1 break except: print("예외 발생:", node_url) time.sleep(1) if connection_flag == 1: break else: print("API노드 연결 실패. 1분후 재시도합니다.") time.sleep(60) St...

파이썬 beem에서 계정 이력 확인 관련 문제

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/3aca97-beem 우선 파이썬 beem에서 계정 트랜잭션 이력을 조회할 때 datetime 객체를 이용하는 방법은 아래의 링크입니다. 파이썬 beem에서 계정 트랜잭션 이력 조회(datetime 객체를 이용한 범위 지정) 왜 그런지는 모르겠지만, 간혹 datetime 객체를 이용해서 큐레이션 보상을 조회할 때 같은 트랜잭션을 2번 가져오는 경우가 발생하는 것을 확인했습니다. 항상 그런것은 아니고 어쩌다가 한번씩 그러는 것 같은에 정확한 원인을 모르겠네요. 블럭체인에 중복 기록되어 있는 것은 아닐 것이고, API 노드에서 조회 요청에 중복된 응답을 주거나 또는 beem에 오류가 있어서 중복된 데이터를 결과로 반환하는 것이 아닐까 추정할 뿐입니다. 임대량 계산 같은 작업은 문제가 없지만, 보상 분배를 위한 파워다운이나 송금에서는 중복 계산될 수 있기 때문에, 가져오는 응답 데이터에 중복이 없는지 확인을 하는 기능을 추가하는 것이 필요합니다. 현재 작업중인 @jsup 큐레이션 보상 분배 기능에서도 이것은 중요한 문제여서, 중복 확인을 하도록 코드를 수정하고 있습니다. 코드 수정이 완료되면 시험을 시작할 예정입니다. 빠르면 내일, 늦으면 며칠 더 걸릴 지도 모르겠습니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

파이썬 beem에서 계정의 스팀, 스팀달러 보유량 확인

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/b1ba1-beem 파이썬 beem에서 계정이 보유중인 스팀과 스팀달러를 확인할 수 있습니다. Account 객체를 통해서 계정 정보를 딕셔너리(dict) 형식으로 가져와서 확인하면 됩니다. 예제 코드는 아래와 같습니다. from beem import Steem from beem.account import Account steem_nodes = ['https://api.steemit.com'] steem = Steem(node=steem_nodes) account = Account('joviansummer', blockchain_instance=steem) # 계정 정보를 딕셔너리(dict) 형식으로 가져와 acc_data에 할당 acc_data = account.json() steem_balance = float(acc_data['balance']['amount'])/1000 sbd_balance = float(acc_data['sbd_balance']['amount'])/1000 print(steem_balance, 'STEEM') print(sbd_balance, 'SBD') Account 객체의 json() 함수를 이용해서 계정 관련 정보를 딕셔너리 형식으로 가져와 변수 acc_data에 할당했습니다. 스팀 보유량은 acc_data['balance']['amount'], 스팀달러 보유량은 acc['sbd_balance']['amount']에 문자열(string) 형식으로 저장되어 있으며 우리가 알고 있는 값에 1000을 곱한 값입니다. 예를 들어 1.5스팀이라면 1500이라고 저장되어 있습니다. 따라서 가져온 값을 1000으로 나누면...

파이썬 beem에서 계정 트랜잭션 이력 조회(datetime 객체를 이용한 범위 지정)

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/beem-datetime 파이선 beem에서 계정 트랜잭션 이력을 조회하고자 할 경우 Account 객체의 history() 함수를 이용할 수 있습니다. history() 함수를 이용해서 특정 범위의 트랜잭션을 가져오는 기본적인 내용은 이전 포스트를 참고하시기 바랍니다. 아래의 링크입니다. 파이썬 beem에서 계정 트랜잭션 이력 조회(범위 지정) history() 함수에서 시작 지점(start)과 종료 지점(stop)을 파이썬의 datetime 객체로 지정할 수도 있습니다. 이렇게 할 경우 특정 시간 범위에 일어난 트랜잭션 이력을 가져올 수 있습니다. 시간 문자열로부터 datetime 객체를 생성하는 방법은 이전 포스트를 참고하시기 바랍니다. 아래의 링크입니다. 파이썬에서 시간 문자열을 datetime 객체로 변환 예를 들어 한국시간 기준으로 6월 20일 10시부터 14시까지의 트랜잭션을 가져오고 싶다면 아래와 같이 할 수 있을 것입니다. from beem import Steem from beem.account import Account import datetime import pytz tz_info = pytz.timezone('Asia/Seoul') # 시작 시간 - 2022.6.20 10:00(GMT+9) start_time = datetime.datetime.strptime('2022-06-20 10:00:00', '%Y-%m-%d %H:%M:%S') start_time_local = start_time.astimezone(tz_info) # 종료 시간 - 2022.6.20 14:00 (GMT+9) stop_time = datetime.datetime.strptime('2022-06-20 14:00:00', '%Y-%m-%d %H:%M:%...

파이썬에서 특정 조건에 맞는 디렉토리/파일명만 추려내기(glob)

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/glob 파이썬에서 어떤 디렉토리에 있는 파일들 중에 특정한 조건에 맞는 파일명만 골라낼 수 있습니다. glob.glob() 함수를 이용합니다. 예를 들어 현재 디렉토리에서 확장자가 txt인 파일만 골라내고 싶다면 아래와 같이 할 수 있습니다. import glob txt_list = glob.glob('*.txt') print(txt_list) ['a.txt', 'b.txt'] glob.glob()에서 반환되는 값은 리스트(list) 형식이며, 인자(argument)로 제시된 조건에 맞는 파일 또는 디렉토리 명칭이 저장됩니다. 아래의 예시처럼 전체 경로를 지정할 수도 있습니다. txt_list = glob.glob('/home/joviansummer/*.txt') print(txt_list) ['/home/joviansummer/a.txt', '/home/joviansummer/b.txt'] 만약 조건을 지정하지 않고 디렉토리 안에 있는 모든 파일/디렉토리를 파악하고 싶다면 os.listdir() 함수를 이용합니다. 관련 내용은 이전 포스트를 참고하시기 바랍니다. 아래의 링크입니다. 파이썬에서 특정 디렉토리 내부의 파일/디렉토리 확인 @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVL...

파이썬 beem을 이용한 파워다운

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/04599-beem 파이썬 beem을 통해서 파워다운을 하는 방법입니다. 파워다운은 Account 객체의 withdraw_vesting() 함수를 사용하며, 스팀파워를 VEST값으로 변환해서 인자(argument)로 사용합니다. 액티브 키(active key)를 필요로 하며, 예제 코드는 아래와 같습니다. @joviansummer 계정에서 20sp만큼 파워다운하는 경우입니다. from beem import Steem from beem.account import Account nodes = ["https://api.steemit.com"] steem_id = 'joviansummer' active_key = '5XXX...' s = Steem(node=nodes, keys=[active_key]) a = Account(steem_id, blockchain_instance=s) sp_val = 20 # 스팀파워를 VEST값으로 변환 vests_val = s.sp_to_vests(sp_val) # 파워다운 a.withdraw_vesting(vests_val) 파워다운을 하면 스팀파워가 곧바로 스팀으로 전환되는 것은 아니고 7일 이후에 전환됩니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.i...

파이썬에서 파일 이동 - shutil.move()

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/shutilmove 파이썬에서 파일을 이동하고 싶을 경우에는 shutil.move() 함수를 사용합니다. 예를 들어 /home/joviansummer/my_data.txt 파일을 /home/joviansummer/data/ 디렉토리로 이동한다면 아래와 같이 될 것입니다. import shutil shutil.move('/home/joviansummer/my_data.txt', '/home/joviansummer/data/my_data.txt') 당연히 파일명을 바꾸는 것도 가능합니다. shutil.move('/home/joviansummer/my_data.txt', '/home/joviansummer/data/data123.txt') 참고로 파일을 복사하려면 shutil.copy() 함수를 사용하며, 관련 내용은 이전 포스트를 참고하시기 바랍니다. 아래의 링크입니다. 파이썬에서 파일 복사 @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

파이썬에서 텍스트 파일의 특정 행에 있는 내용 출력 - enumerate

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/enumerate 파이선에서 텍스트 파일의 특정 행에 있는 내용을 출력하려면 enumerate() 함수를 이용해서 행번호와 그 행의 문자열을 가져온 후 조건을 적용하여 출력할 수 있습니다. 여기서 행번호는 0번부터 시작한다는 점에 유의해야 합니다. 즉, 0번행이 첫번째 행입니다. 예를 들어 my_data.txt 파일에서 3번째부터 10번째행을 출력하고 싶다면, 행번호는 0부터 시작하므로 2번부터 9번까지 출력하면 될 것입니다. 아래의 코드와 같이 할 수 있습니다. f = open('my_data.txt', 'r') for i, line in enumerate(f): if i >= 2 and i <= 9: print(line.rstrip()) if i == 10: break f.close() 위의 코드를 보면 파일에서 읽은 문자열을 line 변수에 할당하는데, 출력하는 print() 함수에서 줄바꿈을 추가해 주기 때문에 파일에서 읽은 내용에서 줄바꿈 기호(\n)는 rstrip() 함수를 이용해서 제거했습니다. 행번호 9번까지 출력하고자 했기 때문에 10번부터는 굳이 파일을 더 읽을 필요가 없습니다. 따라서 행번호가 10이면 break로 루프를 빠져나오고 파일을 닫습니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AV...

파이썬 beem에서 큐레이션 보상 트랜잭션 예시

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/81724b-beem 파이썬 beem의 Account 객체에서 트랜잭션 이력을 조회하기 위해 사용하는 history() 함수를 사용할 때 큐레이션 보상 정보 예시 입니다. Account 객체의 history() 함수에 대한 내용은 이전에 포스팅하였으며 아래의 링크입니다. 파이썬 beem에서 계정 트랜잭션 이력 조회(범위 지정) 트랜잭션 이력중에 큐레이션 보상은 아래와 같은 형태를 가집니다. 딕셔너리(dict) 형식으로 가져올 수 있습니다. {'curator': 'joviansummer', 'reward': {'amount': '1815059', 'precision': 6, 'nai': '@@000000037'}, 'comment_author': 'yyoungbo', 'comment_permlink': '52kxpj', 'trx_id': '0000000000000000000000000000000000000000', 'block': 64966661, 'trx_in_block': 4294967295, 'op_in_trx': 0, 'virtual_op': 15, 'timestamp': '2022-06-11T14:14:36', 'account': 'joviansummer', 'type': 'curation_reward', '_id': 'c54ccb1eb32773aadd466576a99ce3fb9c311a85', 'index': 21783} 보팅...

파이썬 beem에서 스팀파워(SP)를 VEST값으로 변환

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/beem-sp-vest 스팀 블럭체인에서 스팀파워(SP)는 VEST라는 단위로 바뀌어서 처리됩니다. 스팀파워는 사람이 읽기에 편리하지만 정확한 비율 계산을 위해서 내부적으로 처리하는 단위는 자리수가 훨씬 많은 VEST입니다. 관련 내용은 이전 포스팅을 참고하시기 바랍니다. 아래의 링크입니다. 파이썬 beem을 이용해서 현재 스팀파워(SP) 확인하기 위의 포스트에서는 계정의 스팀파워를 확인하기 위해 VEST값을 스팀파워로 변환하는 과정이 있는데, 여기에서는 반대로 스팀파워를 VEST값으로 변환하는 방법을 정리합니다. Steem 객체에서 sp_to_vests()라는 함수를 제공하기 때문에 간편하게 변환할 수 있습니다. 인자(argument)로 입력하는 스팀파워와 반환되는 VEST값 모두 부동소수점(float) 형식입니다. 예제 코드는 아래와 같습니다. from beem import Steem node_list = ["https://api.steemit.com"] s = Steem(node=node_list) # 10.5sp를 VEST로 변환하여 변수 vests_val에 할당 sp_val = 10.5 vests_val = s.sp_to_vests(sp_val) @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트 Posted through the AVLE Dapp ( https://avle.io )

파이썬 beem에서 Steem 객체를 사용할 때 재시도 회수와 시간초과 설정

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/beem-steem 파이썬 beem을 이용해서 스팀 블럭체인과 상호작용하기 위해 Steem 객체를 사용하는데, API노드에 대한 최대 접속 재시도 회수와 응답시간 제한을 지정할 수 있습니다. Blurt나 Hive 객체에서도 동일합니다. 최대 접속 재시도 회수는 지정하지 않을 경우 기본값은 -1입니다. -1이면 재시도 회수에 제한이 없다는 의미입니다. 만약 예를 들어 3번을 재시도해도 API노드에 접속을 하지 못하면 실패로 간주하고 싶다면 num_retries를 아래와 같이 설정합니다. from beem import Steem steem_nodes = ["https://api.steemit.com"] # 접속 재시도 회수 제한: 3회 s = Steem(node=steem_nodes, num_retries=3) 만약 3번 재접속을 해도 접속에 실패한다면 예외(exception)가 발생하게 됩니다. 응답시간 제한은 접속 요청을 보낸 후 몇초 동안 응답을 기다릴 것인지를 의미하며, 지정하지 않을 경우 기본값은 60초입니다. 만약 30초 이내에 응답이 오지 않을 경우 실패로 간주하고 싶다면 timout을 아래와 같이 설정합니다. # 응답시간 제한 30초 s = Steem(node=steem_nodes, timeout=30) 당연히 위의 조건을 둘 다 적용할 수도 있습니다. s = Steem(node=steem_nodes, num_retries=3, timeout=30) @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jS...

파이썬 beem을 이용한 스팀 가격 공시

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/6kkblh-beem 파이썬 beem을 이용해서 스팀 가격을 공시하는 방법입니다. 액티브키(active key)를 필요로 하며, 증인 노드에서 가격을 공시할 때 사용할 수 있습니다. Witness 객체에서 제공하는 feed_publish() 함수를 사용하면 됩니다. 예제 코드는 아래와 같습니다. from beem import Steem from beem.witness import Witness steem_nodes = ['https://api.steemit.com'] # 증인 계정 @jswit wit_id = 'jswit' # 액티브키 priv_key = '5XXXX...' # 스팀 가격: 0.265라고 가정 steem_price = 0.265 s = Steem(node=steem_nodes, keys=[priv_key]) witness = Witness(wit_id, blockchain_instance=s) # 가격 공시 witness.feed_publish(feed_val, account=wit_id) steem-python을 이용한 스팀 가격 공시 방법은 이전 포스트를 참고하시기 바랍니다. 아래의 링크입니다. 파이썬(steem-python)을 이용한 스팀 가격 공시 @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트

파이썬에서 절대값, 지수, 제곱근 계산

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/6mh2fc 파이썬에서 절대값은 기본으로 제공하는 abs() 함수를 이용해서 계산합니다. x = 1.5 y = -4 delta = abx(y-x) print(delta) 5.5 지수와 제곱근은 math 모듈을 이용해야 합니다. 지수는 math.pow() 함수를 이용하고, 제곱근은 math.sqrt() 함수를 이용하면 됩니다. import math # 5^3 계산 base = 5 exp = 3 pow_result = math.pow(base,exp) print(pow_result) # 2의 제곱근 계산 sqrt_result = math.sqrt(2) print(sqrt_result) @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트

파이썬에서 설정 파일 처리(configparser)

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/configparser 파이썬에서 configparser 모듈을 이용해서 설정 파일 처리를 편리하게 할 수 있습니다. 설정 파일 형식은 아래의 예시처럼 섹션(section)으로 나누어지고 항목에 설정값을 할당하는 형태가 됩니다. 예를 들어 test.cfg 파일이 아래와 같다고 해 보겠습니다. [section1] sec1_cfg1 = abc sec1_cfg2 = 123 [section2] sec2_cfg1 = xyz 2개의 섹션이 있고 각 섹션마다 설정 값들이 지정된 상태입니다. configparser를 이용해서 이 파일을 읽으면 설정을 딕셔너리(dict)와 동일한 방식으로 처리할 수 있습니다. ConfigParser 객체를 사용하면 되며, 파일 읽기는 read() 함수를 이용합니다. import configparser config_file = 'test.cfg' # 설정 파일 읽기 cfg = configparser.ConfigParser() cfg.read(config_file) # section1의 sec1_cfg1 설정값 출력 print(cfg['section1']['sec1_cfg1']) abc 설정 파일에서 읽은 값은 문자열(str)로 저장되므로, 설정값을 수자로 사용하려면 변환해 주어야 합니다. 예를 들어 위의 예시에서 section1의 sec_cfg2 항목의 값이 123인데, 정수 계산에 사용하려면 형식을 바꿔주어야 하겠죠. sec1_cfg2_int = int(cfg['section1']['sec1_cfg2']) 설정 파일을 변경한 후에 저장하고 싶다면 write() 함수를 이용합니다. 예를 들어 section1의 sec1_cfg2 항목 설정값을 456으로 설정한 후에 저장하려면 아래와 같이 할 수 있겠습니다. cfg[...

파이썬 beem에서 특정 포스트의 모든 댓글을 가져오기

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/5f77ce-beem 파이썬 beem에서 특정 포스트에 달린 댓글을 가져오는 방법은 두가지입니다. 첫번째 방법은 해당 포스트에 달린 댓글만 가져오는 것이고, 두번째 방법은 해당 포스트의 댓글에 달린 댓글까지 전부 가져오는 것입니다. 해당 포스트에 달린 댓글만 가져오는 방법은 이전 포스트를 참고하시면 됩니다. 아래의 링크입니다. 파이썬 beem을 이용해서 특정 포스트의 댓글 가져오기 댓글에 달린 댓글까지 전부 가져오는 방법은 Comment 객체의 get_all_replies() 함수를 사용합니다. 포스트에 달린 댓글만 가져오는 함수인 get_replies()와 사실상 동일하게 동작하며, Comment 객체들로 구성된 리스트(list)를 반환합니다. 만약 댓글에 달린 댓글이 없다면 get_replies() 함수를 쓰나 get_all_replies() 함수를 쓰나 결과는 동일할 것입니다. 예제 코드는 사실상 위의 이전 포스트와 동일한 형태가 됩니다. 다시 가져와서 적어 보자면 아래와 같습니다. 블러트 기준이지만 스팀에서는 Blurt 대신 Steem 객체를 사용할 뿐 나머지는 동일합니다. from beem import Blurt from beem.comment import Comment node_list = ["https://rpc.blurt.world"] blurt = Blurt(node=node_list) authorperm = "joviansummer/4tnyma-beem" comment = Comment(authorperm, blockchain_instance=blurt) # 모든 댓글 리스트를 가져와서 replies에 할당 - get_all_replies() 함수 replies = comment.get_all_replies() # 각 댓글의 작성자 출력 for repl...

파이썬 + 스팀: 반복적으로 API 노드에 접속할 때 고려할 점

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/api 스팀 블럭체인으로부터 정보를 얻기 위해 API 노드에 요청을 보낼 경우, 일회성으로 접속하는 경우에는 별 문제가 없지만 while 또는 for 반복문을 통해서 반복 접속할 경우에는 응답이 제대로 오지 않을 수 있습니다. 예를 들어 특정 스팀 계정에 대한 어떤 정보를 조회하기 위한 함수 func_test()가 있다고 가정해 보겠습니다. 인자(argument)로 스팀 계정을 받아서 API 노드로부터 어떤 정보를 조회한 결과를 돌려주는 기능을 한다면, 아래와 같은 코드를 만들어 볼 수 있겠습니다. steem_id = 'joviansummer' result = func_test(steem_id) print(result) 위의 경우에는 별 문제가 없지만, 예를 들어 100개의 스팀 계정을 리스트(list) 형식으로 가지고 있다면 이들의 정보를 조회하기 위해 아래와 같은 코드를 만들 수 있습니다. account_list = ['joviansummer', 'jsup', 'jswit', ... ] for steem_id in account_list: result = func_test(steem_id) print(result) 코드 자체로는 전혀 문제가 없어 보이지만, 실제로 이러한 코드를 실행해 보면 API 노드에서 처음에는 정상적으로 응답이 오다가 어느 순간 제대로 응답이 오지 않는 경우가 발생할 수 있습니다. 아마도 한꺼번에 과도한 요청이 온다고 판단될 경우 접속에 제한을 하는 것으로 보입니다. 제대로 응답을 받지 못할 경우 API 접속 관련 파이썬 모듈에서 다섯번까지 재시도를 합니다만 결국 응답을 받지 못하는 경우도 발생합니다. 일단 첫번째로 생각해 볼 수 있는 해결책은 API 노드에 좀 더 공손하게(?) 요청을 하는 것입니다. time.sleep()...

파이썬 + 스팀: 트랜잭션(transaction)과 오퍼레이션(operation)

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/transaction-operation 스팀 블럭체인에서 트랜잭션(transaction)은 특정 계정이 블럭체인에 디지털 서명을 해서 기록하는 거래 단위입니다. 오퍼레이션(operation)은 실제 실행되는 구체적인 작업, 예를 들어 보팅, 송금, 포스팅 등입니다. 이러한 구분이 필요한 이유는 1개의 트랜잭션에 여러개의 오퍼레이션이 존재할 수도 있기 때문입니다. 예를 들어 A에게 송금하는 오퍼레이션과 B에게 송금하는 오퍼레이션을 하나의 트랜잭션으로 묶어서 블럭체인에 기록할 수 있습니다. 이렇게 할 경우 2개의 오퍼레이션이 1개의 트랜잭션ID를 가지게 됩니다. 일반적으로 스팀잇을 사용할 때는 이런 경우가 없겠지만, 서비스를 개발하는 입장에서는 상당히 편리한 기능입니다. API 노드와의 통신을 줄여서 부담을 경감할 수도 있고, 같이 붙여서 한번에 기록하고 싶은 정보들이 있을 수 있기 때문입니다. 어제 포스팅했던 파이선 beem을 이용한 송금 코드를 예로 한번 보겠습니다. 관련 내용은 아래의 링크입니다. 파이썬 beem에서 TransactionBuilder를 이용한 스팀/스팀달러 송금 위의 포스트에 있는 예제 코드를 다시 가져오면 아래와 같습니다. from beem import Steem from beem.transactionbuilder import TransactionBuilder from beembase.operations import Transfer node_list = ["https://api.steemit.com"] steem = Steem(node=node_list) # 보내는 계정: joviansummer sender_id = 'joviansummer' # 보내는 계정의 액티브키 sender_active_key = '5XXXXXX....' # 받는 계정: ...

파이썬 beem에서 TransactionBuilder를 이용한 스팀/스팀달러 송금

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/beem-transactionbuilder 파이썬 beem에서 스팀(STEEM)/스팀달러(SBD) 송금은 굳이 TransactionBuilder 객체를 이용하지 않아도 Account 객체에서 편하게 할 수 있긴 합니다. 관련 내용은 아래의 링크입니다. 파이썬 beem에서 스팀/스팀달러 송금 여기서는 좀 더 복잡한 방법이지만 어쨌든 알아두면 나쁠 것이 없기 때문에 TransactionBuilder 객체를 이용한 송금 예제 코드를 정리해 둡니다. 아래의 코드는 @joviansummer에서 @jsup에게 0.001스팀을 전송하는 예시입니다. 스팀/스팀달러를 보내려면 액티브키(active key)를 필요로 합니다. from beem import Steem from beem.transactionbuilder import TransactionBuilder from beembase.operations import Transfer node_list = ["https://api.steemit.com"] steem = Steem(node=node_list) # 보내는 계정: joviansummer sender_id = 'joviansummer' # 보내는 계정의 액티브키 sender_active_key = '5XXXXXX....' # 받는 계정: jsup receiver_id = 'jsup' # 송금 설정을 위한 딕셔너리 transfer_dict = {"from":sender_id, "to":receiver_id, "amount":"0.001 STEEM", "memo":"스팀 송금 시험입니다!"} # 송금 tx = TransactionBuilder(blockcha...

파이썬 beem에서 계정 트랜잭션 이력 조회(범위 지정)

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/4dhioe-beem 우선, 파이썬 beem에서 계정 트랜잭션(transaction) 이력을 가장 최근 항목부터 순차적으로 가져오는 기능은 Account 객체의 get_histoty_reverse()에서 제공하고 있으며 관련 내용은 아래의 링크입니다. 파이썬 beem에서 블러트 계정 트랜잭션 이력 조회 여기서는 특정 범위의 이력을 오래된 것부터 순차적으로 - 즉, 시간 순서대로 - 조회하는 방법을 정리합니다. Account 객체의 history() 함수를 사용합니다. 아래의 예시는 스팀에서 @joviansummer의 첫번째 트랜잭션부터 5번째 트랜잭션까지를 조회하는 코드입니다. from beem import Steem from beem.account import Account steem_node = ["https://api.steemit.com"] steem = Steem(node=steem_node) account = Account('joviansummer', blockchain_instance=steem) history_data = account.history(start=1, stop=5, use_block_num=False) for record in history_data: print(record) history()에서 use_block_num=False로 지정하면 시작번호(start)와 끝번호(stop)가 블럭 번호가 아니라 해당 계정의 이력 순서로 인식합니다. 트랜잭션 정보는 딕셔너리(dict) 형식이며, 출력 예시는 아래와 같습니다. {'delegator': 'steem', 'delegatee': 'joviansummer', 'vesting_shares': {'amount': ...

파이썬 beem에서 계정의 트랜잭션 개수 파악

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/7ha5y7-beem 파이썬 beem을 이용해서 특정 계정이 지금까지 몇개의 트랜잭션을 했는지 확인할 수 있습니다. Account 객체의 virtual_op_count() 함수를 사용하며 리턴되는 값은 정수(int)입니다. 예를 들어 스팀에서 @joviansummer가 지금까지 몇개의 트랜잭션을 했는지 보려면 아래와 같이 할 수 있습니다. from beem import Steem from beem.account import Account steem_node = ["https://api.steemit.com"] steem = Steem(node=steem_node) account = Account('joviansummer', blockchain_instance=steem) ops_num = account.virtual_op_acount() print(ops_num) 트랜잭션 개수는 Account 객체에서 계정 트랜잭션 이력을 확인하기 위한 history()에서 조회할 이력의 범위를 지정할 때 활용할 수 있습니다. 이 부분은 다음 포스팅에서 정리할 예정입니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트

파이썬에서 디렉토리 생성(os.mkdir, os.makedirs)

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/os-mkdir-os-makedirs 파이썬에서 디렉토리를 생성하는 방법입니다. 상위 디렉토리가 모두 존재하는 경우, os.mkdir() 함수를 이용하면 됩니다. import os os.mkdir('/run/shm/test') 위의 예시는 /run/shm 디렉토리 하위에 test 디렉토리를 만드는 경우입니다. 만약 /run/shm 디렉토리 하위에 test2/test 디렉토리를 만들고 싶은데 /run/shm/test2 디렉토리가 존재하지 않는다면, 위의 os.mkdir() 함수에서는 오류가 발생하게 됩니다. 이 경우에는 os.makedirs() 함수를 이용합니다. 리눅스에서 "mkdir -p"와 같은 기능입니다. os.makedirs('/run/shm/test2/test') 만약 이미 해당 디렉토리가 존재하고 있는데 만들려고 시도한다면 오류가 발생합니다. os.makedirs()의 경우 exist_ok=True라고 지정해 주면 이미 존재하는 디렉토리일 경우에도 오류 메시지를 표시하지 않고 무시합니다. os.makedirs('/run/shm/test2/test', exist_ok=True) @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트

파이썬에서 리눅스 shell 명령 실행

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/shell 파이썬에서 shell 명령을 실행하는 방법입니다. os.system() 함수를 이용하면 됩니다. 예를 들어 리눅스 shell에서 화면에 "hello"를 출력하기 위한 echo 명령을 파이썬에서 실행할 수 있습니다. import os os.system('echo "hello"') 스크립트도 이런 식으로 실행할 수 있습니다. import os os.system('bash my_script.sh') 이 방법을 이용해서 리눅스 shell 스크립트와 파이썬을 연동할 수도 있겠습니다. 예를 들어 my_script.sh에서 출력되는 내용을 파일에 저장한 후에 파이썬에서 읽어서 뭔가 작업을 할 수 있겠죠. 아래의 예시는 my_script.sh의 출력을 리다이렉션(redirection)을 통해 my_result.txt 파일로 저장하고, 이것을 파이썬에서 읽는 경우입니다. import os shell_script = 'my_script.sh' result_file = 'my_result.txt' # 실행할 명령: bash my_script.sh > my_result.txt sys_command = 'bash ' + shell_script + ' > ' + result_file # 스크립트 실행 os.system(sys_command) # 파일 열기 f = open(result_file, 'r') @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvot...

파이썬의 try - except 구문에서 오류 메시지 출력(traceback)

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/try-except-traceback 파이썬의 try - except 구문을 사용하면서 이 구문을 사용하지 않았을 경우에 출력되는 오류 메시지를 그대로 출력할 수 있습니다. 우선 try - except 구문에 대한 기본적인 내용은 아래의 포스트를 참고하시기 바랍니다. 파이썬에서 예외(exception) 처리 위의 포스트에서 사용한 예제 코드를 다시 적어 보면 아래와 같습니다. try: x = 100/0 except: print("예외가 발생했습니다.") try - except 없이 실행한다면 아래와 같이 됩니다. x = 100/0 Traceback (most recent call last): File "\<stdin>", line 1, in \<module> ZeroDivisionError: division by zero try - except 구문에서도 위와 같은 오류 메시지를 그대로 출력하고 싶다면 traceback 모듈을 이용합니다. 코드 실행을 멈추지 않은 상태에서 자세한 오류 메시지를 확인하고 싶을 때 편리합니다. traceback.print_exc() 함수로 출력하면 됩니다. import traceback try: x = 100/0 except: print("예외가 발생했습니다.") traceback.print_exc() 예외가 발생했습니다. Traceback (most recent call last): File "\<stdin>", line 1, in \<module> ZeroDivisionError: division by zero

파이썬에서 파일 및 디렉토리 삭제하기

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/nseno 파이썬에서 파일을 삭제하려면 os.remove() 함수를 사용합니다. 코드 예시를 보면 금방 알 수 있습니다. import os target_file = '/home/joviansummer/test.txt' os.remove(target_file) os.remove() 함수는 파일에 대해서만 유효하고 디렉토리는 삭제할 수 없습니다. 디렉토리를 삭제하려면 os.rmdir() 함수를 사용합니다. target_dir = '/home/joviansummer/temp_dir' os.rmdir(target_dir) try/except 구문을 사용하면 좀 더 깔끔합니다. try: os.remove(target_file) print('파일 삭제 성공:', target_file) except: print('파일 삭제 실패:', target_file) @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트

파이썬에서 사용자ID와 패스워드 입력 받기

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/4vhfao-id 파이썬에서 사용자ID와 패스워드를 입력 받아야 할 경우, 사용자ID는 키보드 입력에 화면에 표시되어야 하고 패스워드는 표시되지 말아야 합니다. 화면에 표시되는 입력은 input() 함수를 사용하고, 표시되지 않는 입력은 getpass 모듈을 활용합니다. 간단하기 때문에 코드 예시를 보면 금방 알 수 있습니다. import getpass # 사용자 이름 입력 받기 user_id = input('사용자ID를 입력해 주세요: ') print('사용자:', user_id) # 패스워드 입력 받기 password = getpass.getpass('패스워드를 입력해 주세요: ') # 패스워드가 'abc'인지 확인 if password == 'abc': print('올바른 패스워드입니다.') else: print('잘못된 패스워드입니다.') 위의 코드에서 getpass.getpass()에 의해 입력 받는 문자열은 화면에 표시되지 않습니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트

파이썬에서 리스트/딕셔너리 복사

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/cfchw 파이썬의 리스트(list)와 딕셔너리(dict)는 등호(=)를 이용해서 다른 변수에 할당할 경우 해당 자료가 복사되지 않고 동일한 데이터에 연결됩니다. 아래의 리스트 예시를 보겠습니다. x = [1, 2, 3] y = x 위와 같이 한 상태에서 y의 마지막 원소를 꺼내기 위해 pop()을 사용해 봅니다. y.pop() 이렇게 하면 x와 y가 동일한 데이터에 연결되어 있기 때문에 x를 출력해도 마지막 원소가 제거된 것을 볼 수 있습니다. print(x) [1, 2] 데이터를 복사하여 별도의 리스트를 만들고 싶다면 아래와 같이 copy() 함수를 이용해야 합니다. y = x.copy() 이렇게 하면 y에서 pop()을 사용해도 x에 저장된 데이터에는 변화가 없습니다. 딕셔너리도 마찬가지입니다. 데이터 자체를 복사해서 하나 더 만들고 싶다면 copy()를 사용합니다. a = {'name':'john', 'age':20} b = a.copy() @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트

Nuitka - 파이썬 스크립트를 바이너리 실행 파일로 변환

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/nuitka 파이썬과 관련해서 재미 있는 프로젝트를 찾았습니다. Nuitka라는 프로젝트입니다. https://github.com/Nuitka/Nuitka 파이썬 스크립트를 C언어로 변환한 후에 컴파일하여 바이너리 실행 파일로 만들어준다고 합니다. 아직 사용해 보진 않았는데요. 라즈베리파이처럼 작은 컴퓨터에서 컴퓨팅 자원이 아쉬운 상황이라면 파이썬 스크립트를 직접 실행하는 것보다 Nuitka로 컴파일한 바이너리를 실행하면 자원이 절약될 것 같기도 합니다. 소스 코드를 공개하지 않아야 할 경우(코드에 패스워드가 포함되어 있는 경우 등)에도 사용할 수 있을 것 같네요. 어쨌든 나중에 필요할 수도 있을 듯해서 여기에 메모해 둡니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트

tmux 강력 추천 (리눅스)

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/tmux 리눅스에 tmux라는 프로그램이 있습니다. 이렇게 굉장하고 좋은 프로그램이 있다니 놀라울 따름입니다. 터미널창 하나를 여러개로 분할해서 사용할 수 있고, 원격에서 ssh로 접속해서 작업하다가 작업하던 내용을 그대로 놔두고 접속을 종료했다가 나중에 다시 그 상태 그대로 다시 재개할 수 있습니다. 사용법은 여기 다시 쓰는 것보다 잘 정리된 블로그가 있어 링크합니다. 아래의 링크입니다. Tmux 설치, 사용하는 방법, 예제, 명령어 리눅스 터미널창을 사용하는 사람이라면 강력 추천입니다. 리눅스 좀 쓰는 사람이면 누구나 다 사용하는 프로그램인데 나 혼자만 몰랐던 것은 아닐까 싶기도 하네요. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트

파이썬 beem에서 블러트 보상 클레임 문제

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/ae9hk-beem 파이썬 beem에서 블러트 보상 클레임은 뭔가 간단치 않네요. 스팀 보상 클레임과 같은 방법으로는 오류가 발생하고 제대로 동작하지 않았습니다. 파이썬 beem을 이용한 스팀 보상 클레임 방법은 아래의 링크입니다. 파이썬 beem을 이용해서 스팀 보상 클레임하기 블러트에서는 Account 클래스의 claim_reward_balance() 함수가 제대로 동작하지 않았습니다. 아래와 같이 코드를 작성해서 시험해 보았는데 실패입니다. from beem import Blurt from beem.account import Account blurt_node = ["https://rpc.blurt.world"] blurt_id = 'joviansummer' posting_key = '5XXXXXXX...' blurt = Blurt(node=blurt_node, keys=[posting_key]) account = Account(blurt_id, blockchain_instance=blurt) # 보상 클레임(블러트에서는 오류 발생) account.claim_reward_balance() 아마도 claim_reward_blance() 함수가 스팀과 하이브만 고려해서 구현되어 있는 것이 아닌가 싶습니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트

파이썬에서 명령행으로 받은 인자(argument) 처리

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/4y6jpg-argument 파이썬 스크립트를 실행할 때 입력하는 내용은 sys.argv에 리스트 형태로 저장됩니다. 예를 들어 2개의 정수를 인자(argument)로 받아서 곱셈한 결과를 출력하는 파이썬 스크립트가 multi.py라면, 아래와 같이 실행할 수 있을 것입니다. python3 multi.py 10 20 위와 같이 명령을 실행할 경우, sys.argv는 아래와 같이 구성됩니다. ['multi.py', '10', '20'] 스크립트 이름은 sys.argv[0]에, 첫번째 인자는 sys.argv[1]에, 두번째 인자는 sys.argv[2]에 문자열(string) 형태로 저장된 것을 볼 수 있습니다. multi.py 스크립트의 내용은 아래와 같이 구성할 수 있겠습니다. import sys if len(sys.argv) !=3: print("오류: 2개의 인자가 필요합니다.") exit() try: x_int = int(sys.argv[1]) y_int = int(sys.argv[2]) except: print("오류: 인자는 정수여야 합니다.") exit() # 곱한 결과 출력 result = x_int * y_int print(sys.argv[1], "*", sys.argv[2], "=", result) @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗...

파이썬 beem을 이용해서 스팀 보상 클레임하기

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/7yru57-beem 파이썬 beem을 이용해서 스팀의 저자/큐레이션 보상을 클레임하는 방법입니다. Account 객체에서 제공하는 claim_reward_balance()를 사용하면 간편하게 가능합니다. 보상 클레임에는 포스팅키가 필요하며, 아래의 예제와 같이 할 수 있겠습니다. from beem import Steem from beem.account import Account steem_node = ["https://api.steemit.com"] # 스팀 ID steem_id = 'joviansummer' # 포스팅키 posting_key = '5X...' steem = Steem(node=steem_node, keys=[posting_key]) account = Account(steem_id, blockchain_instance=steem) # 보상 클레임 account.claim_reward_balance() @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트

스팀 seed node가 살아 있는지 확인하기

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/seed-node 스팀 seed node가 살아 있어서 응답을 하는지 확인하기 위한 간단한 리눅스 명령입니다. 출처는 아래의 포스트입니다. Me and STEEM (3) -- fixing seed node stuck issue 리눅스의 netcat(nc)을 이용해서 seed node에 접속을 하고 응답이 있으면 "Ok", 없으면 "Failed"를 출력합니다. 아래의 명령입니다. [ -n "`echo EOF | nc [seed_node_host] [port] -w 10 -q 2`" ] && echo Ok || echo Failed 여기서 [seed_node_host]는 seed node의 호스트 이름이고 [port]는 포트 번호입니다. 포트 번호는 통상 2001이 많습니다. 스팀잇의 공식 seed node중 하나인 sn1.steemit.com이 정상인지 확인하려면 아래와 같이 하면 되겠습니다. [ -n "`echo EOF | nc sn1.steemit.com 2001 -w 10 -q 2`" ] && echo Ok || echo Failed 문제가 없다면 "Ok"가 출력되어야 합니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기 STEEM.NFT - 디지털 아트 보존 프로젝트

파이썬에서 바이트(byte)를 문자열(str)로 변환하기

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/byte-str 파이썬에서 바이트(byte)를 문자열(str)로 변환하는 방법입니다. 바이트 형식의 변수에 대해 decode() 함수를 사용하면 됩니다. # 바이트 형식의 데이터 data = b'abcd' # utf-8 문자열로 변환해서 data_str에 할당 data_str = data.decode('utf-8') 내용도 간단하고 사용할 일이 그리 많지는 않는데, 막상 사용해야 할 때 잊어버리는 경우가 있어서 포스팅해 둡니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기

파이썬 beem을 이용한 포스팅 - 커뮤니티 포스트

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/69nq2h-beem 파이썬 beem을 이용해서 특정 커뮤니티에 포스팅하는 방법입니다. 기본적으로 블로그 포스트와 거의 비슷하며, 어느 커뮤니티에 포스팅할 것인지를 parent permlink를 이용해서 지정합니다. 파이썬 beem을 이용한 블로그 포스트는 아래의 링크를 참고하시기 바랍니다. 파이썬 beem을 이용한 포스팅 - 블로그 포스트 블로그 포스트에서는 첫번째 태그(tag)를 parent permlink로 지정했지만, 커뮤니티 포스트에서는 커뮤니티 식별자를 지정합니다. 커뮤니티 식별자는 "hive-[번호]" 형식이며, 커뮤니티 접속 URL에서 확인할 수 있습니다. 예를 들어 "NOTICE & AutoVoting" 커뮤니티는 아래의 링크로 접속할 수 있습니다. https://steemit.com/created/hive-141029 이 경우 커뮤니티 식별자는 hive-141029입니다. 이 커뮤니티에 포스팅을 한다면 아래의 코드처럼 할 수 있겠습니다. parent_permlink를 제외한 나머지 부분은 사실상 블로그 포스트와 동일합니다. import json from beem import Steem from beembase.operations import Comment from beem.transactionbuilder import TransactionBuilder node_list = ["https://api.steemit.com"] steem = Steem(node=node_list) steem_id = 'joviansummer' posting_key = '5XXXX...' community_id = 'hive-141029' author = steem_id permlink = 'my-co...

파이썬 beem에서 Comment 클래스 혼동에 유의

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/beem-comment 파이썬 beem에서 사용자 포스트를 처리하기 위한 Comment 클래스가 beem.comment에서 가져온 것인지, 아니면 beembase.operations에서 가져온 것인지 유의할 필요가 있습니다. 이전에 작성된 포스트를 읽는 경우, beem.comment에서 가져온 Comment 클래스를 사용합니다. 이전에 작성했던 아래의 포스트가 그 예입니다. 파이썬 beem을 이용해서 특정 포스트의 댓글 가져오기 위의 포스트에 제시된 코드 예시를 보면 beem.comment에서 가져오고 있음을 볼 수 있습니다. from beem.comment import Comment 반면에 포스팅을 작성하는 작업을 하는 경우에는 beembase.operations에서 가져온 Comment 클래스를 사용합니다. 아래의 포스트가 그 예입니다. 파이썬 beem을 이용한 포스팅 - 블로그 포스트 from beembase.operations import Comment 만약 양쪽 클래스를 모두 사용하려면 아래와 같이 해서 혼동되지 않도록 하는 것이 좋겠습니다. from beem.comment import Comment import beembase 위와 같이 하고, beembase.opations의 Comment 클래스는 beembase.operations.Comment로 사용하면 되겠습니다. @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하겠습니다. ( https://steemitwallet.com/~witnesses ) jswit 증인 노드 프로젝트를 시작합니다. jsup 업보팅(upvoting) 서비스 소개 jsup 수혜자 지정 기능 추가 jSTEEM 프로젝트 - 텔레그램 챗봇으로 구현하는 스팀 블럭체인 탐색기

파이썬 beem을 이용한 포스팅 - 댓글

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/3iny73-beem 파이썬 beem을 이용해서 특정 포스트에 댓글을 다는 방법입니다. 이전에 정리한 블로그 포스트 작성법에서 이어지는 내용입니다. 파이썬 beem을 이용한 포스팅 - 블로그 포스트 블로그 포스트와 달리 댓글은 포스트 제목이나 태그를 지정할 필요가 없습니다. 대신에 어느 포스트에 대한 댓글인지 지정해야 하므로 parent author와 parent permlink가 필요하겠죠. 예를 들어, 아래의 포스트에 댓글을 달아야 한다고 가정해 보겠습니다. https://steemit.com/hive-141029/@joviansummer/steem-nft-nft 이 경우, parent author는 "joviansummer", parent permlink는 "steem-nft-nft"가 될 것입니다. 코드는 아래와 같이 작성할 수 있습니다. 제목은 빈 문자열을 사용하고 태그는 지정하지 않습니다. from beem import Steem from beembase.operations import Comment from beem.transactionbuilder import TransactionBuilder node_list = ["https://api.steemit.com"] steem = Steem(node=node_list) steem_id = 'joviansummer' posting_key = '5XXXX...' author = steem_id permlink = 'my-reply-with-python-beem-test' title = '' body = '이것은 시험용 댓글입니다.' # 댓글 작성 대상: joviansummer/steem-nft-nft parent_author ...

파이썬 beem에서 스팀/스팀달러 송금

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/hexff-beem 파이선 beem을 이용해서 스팀 또는 스팀달러의 잔고를 확인하고 송금할 수 있습니다. Account 객체에서 제공하는 transfer() 함수를 이용해서 간편하게 작업할 수 있습니다. 송금을 하려면 액티브키(active key)를 필요로 합니다. 예시를 보겠습니다. from beem import Steem from beem.account import Account node_list = ['https://api.steemit.com'] steem_id = 'joviansummer' active_key = '5XX....' steem = Steem(node=node_list, keys=[active_key]) account = Account(steem_id, blockchain_instance=steem) # @joviansummer의 현재 SBD 보유량 출력 print(account['sbd_balance']) # @joviansummer가 @jsup에게 1.5 SBD 송금 memo_str = 'SBD 송금 시험입니다!' account.transfer('jswup', 1.5, 'SBD', memo=memo_str) # @joviansummer의 현재 스팀 보유량 출력 print(account['balance']) # @joviansummer가 @jswit에게 1.5 스팀 송금 memo_str = 'STEEM 송금 시험입니다!' account.transfer('jswit', 1.5, 'STEEM', memo=memo_str) @joviansummer의 스팀 프로젝트 스팀 증인노드를 운영중입니다. @jswit에 증인투표해 주시면 감사하...

파이썬 beem을 이용한 포스팅 - 블로그 포스트

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/6bdwr8-beem 파이선 beem을 이용해서 블로그에 포스팅 하는 방법입니다. 저자(author), 펌링크(permlink), 제목(title), 본문(body), json metadata, parent author, parent permlink 등을 지정해야 합니다. 펌링크는 특정 계정이 작성한 포스트를 구분하는 식별자이므로 이전에 사용한 펌링크와 겹치지 않아야 합니다. 펌링크 관련 내용은 이전 포스트를 참고하시기 바랍니다. 펌링크(permlink) 관련 내용 간략하게 정리 json metadata에는 태그 목록이 들어갑니다. 그 외에 다양한 정보를 딕셔너리(dict) 형식으로 지정할 수 있는데, 블로그 포스팅에서 태그는 필수이므로 반드시 있어야겠습니다. 아래와 같이 딕셔너리를 만들 수 있겠습니다. import json # 태그: test, beem metadata = {'tags':['test','beem']} # 딕셔너리를 json 형식 문자열(string)로 변환 json_metadata = json.dumps(metadata) 블로그 포스팅일 경우, parent permlink는 태그로 지정합니다. 위의 예시를 사용하자면, 첫번째 태그가 "test"이므로 parent permlink는 "test"가 됩니다. 댓글이 아니므로 parent author는 없습니다. 위의 내용을 바탕으로 아래와 같이 블로그 포스팅 코드를 작성해 볼 수 있습니다. 스팀 기준입니다. import json from beem import Steem from beembase.operations import Comment from beem.transactionbuilder import TransactionBuilder node_list = [...

파이썬 beem에서 특정 포스트의 이미지와 태그 확인하기

by joviansummer original STEEMIT post: https://steemit.com/blog/@joviansummer/21zrt3-beem 사람은 포스트 내용을 보고 이미지와 태그가 있는 것을 즉각적으로 알지만, 프로그램이 포스트에서 이미지와 태그를 확인하려면 포스트 데이터에 포함된 json_metadata라는 항목을 이용해야 합니다. 파이썬 beem에서 특정 포스트에 이미지가 있는지 없는지 간편하게 판별할 수 있습니다. Comment 객체를 이용해서 대상 포스트의 데이터를 가져온 후, 딕셔너리(dict) 형식으로 제공되는 json_metadata 항목에 "image"라는 키(key)가 있는지 확인하면 됩니다. 대상 포스트는 오소펌(authorperm)으로 식별합니다. 아래와 같이 해 볼 수 있겠습니다. 스팀 기준입니다. from beem import Steem from beem.comment import Comment node_list = ["https://api.steemit.com"] steem = Steem(node=node_list) authorperm = "joviansummer/pfpzd-jsteem-ops" comment = Comment(authorperm, blockchain_instance=steem) # comment['json_metadata'] 딕셔너리 키(key)에 "image"가 포함되어 있는지 확인 if 'image' in comment['json_metadata']: print("포스트에 이미지가 포함되어 있습니다. 이미지 url은 아래와 같습니다") for img_url in comment['json_metadata']['image']: print(img_url) else: print("포스트에 이미지가 포...