굳헬로의 스팀 프로그램 일기!! 스물세번째 #23 스팀코인판의 소각글의 정보를 가지고 와서 자동보팅을 해보자!! 그 두번째 시간 (2/N)

in sct •  last year 

steem.jpg

어느덧 이번주도 신나는 불금!! 주말을 앞두고 있네요.

주말엔 또 물놀이 가자고 하던데.... 쉬고 싶은데... 고민입니다.. ㅎㅎ

그럼 오늘도 프로그램 일기 남겨보겠습니다.


어제부터는 잠시 쉬어(?)가는 시간으로 자동보팅 만들기 그 첫번째 스팀코인판의 소각글에 자동보팅을 하기 위해 코드를 짜기 시작했는데요.

먼저 최근 소각한글의 정보를 얻어오기 위해 api.get_history("null", "SCT") null 계정으로 SCT 전송된 내역을 가지고 와서 포스팅 아이디를 추출해 user.commit.vote(post_id , weight, userid) 를 통한 보팅 프로그램을 짜보았습니다.

오늘은 이어서 실시간으로 null 계정의 SCT 송금 내역을 검사하여 소각글의 정보를 알아오는 코드를 작성해 보도록 하겠습니다.

실시간으로 블록을 검색하려면 새로이 생기는 블록을 모두 검사해야 하는데요. 지금은 이 단계까진 필요하지 않고, null 계정의 SCT 송금 내역만을 검사하면 되기에 api.get_history("null", "SCT")를 주기적으로 호출하여 null 계정에 SCT송금 내역이 있는지를 검사하면 되겠습니다.

def run():
    while True:
        token_history = api.get_history("null", "SCT",)
        for token in token_history:
            if float(token["quantity"]) >= 150 :
                post_id = token["memo"]
                post_id = post_id.replace("@", "")
                print("150SCT 이상 소각한 글의 주소 : " + post_id)
                time.sleep(3)

어제 만든 코드를 무한 반복 동작 시켜 주기적으로 null 계정의 SCT 송금 내역을 검사하는 run() 함수를 만들어 보았습니다.

3초마다 검사를 수행하며 150 SCT 이상 송금한 포스팅의 주소를 찍어줍니다.

하지만 새로운 소각글이 없다면 최근 소각된 마지막 글만 계속해서 보여주기에 한번 검사한 내역은 패스하는 코드가 필요할 것 같습니다.

global latest_check_block_num        
token_history = api.get_history("null", "SCT")

for token in token_history:
    if int(token["block"]) > int(latest_check_block_num):
        if float(token["quantity"]) >= 150 :
            post_id = token["memo"]
            post_id = post_id.replace("@", "")
            print("150SCT 이상 소각한 글의 주소 : " + post_id)
            latest_check_block_num = token_history["block"]

print("마지막 검사 시간 : ", time.strftime('%Y-%m-%d %HH:%MM:%SS', time.localtime(time.time())), " 마지막 검사 블록 : " + latest_check_block_num)
time.sleep(3)

latest_check_block_num변수에 마지막 검사 블록 넘버를 저장하고 새로운 블록이 아니라면 이제 다시 검사하지 않습니다.

그리고 마지막 검사 시간과 블록 넘버도 출력하여 현재 상황을 알 수 있게 하였습니다.

그리고 보팅을 위해

user = Steem(keys=["POST_KEY"])
weight = 100
user.commit.vote(post_id , weight, userid)   

이 코드만 넣으면 누군가 null 계정으로 150SCT 이상 소각했을 경우 보팅을 하게 됩니다.

하지만 아직 조금 많이 부족해 보이죠.

이제 필요한 것이 소각글의 포스팅 시간을 가져와서 원하는 시간에 보팅을 하도록 설정하고, 이미 보팅한 글이면 다시 보팅 하지 않도록 보팅 유무도 검사해야겠네요.

먼저 보팅이 되어 있는지 아닌지를 검사해 보겠습니다.

post = Post("post_id")
post_json = post.export()
vote_check = 0
for voter in post_json['active_votes'] :
    if userid in voter['voter'] :
        print("이미 보팅 완료 된글")
        vote_check = 1                    
        if vote_check == 0 :
            user = Steem(keys=["POST_KEY"])
            eight = 100
            user.commit.vote(post_id , weight, userid)  

앞에서 만든 post_id를 이용하여 Post("post_id") 포스팅의 정보를 가지고 오고, 보팅 정보가 들어 있는 post_json['active_votes'] 에서 보팅을 했는지 여부를 검사하여 보팅을 안했다면 보팅을 하도록 합니다.

그리고 포스팅 시간을 검사해서

after_time = (datetime.datetime.utcnow() - post_json['created']).seconds
if after_time >= 900 :                                    
    user.commit.vote(post_id , weight, userid)  
elif after_time < 900 :
    time.sleep(900 - after_time)
    user.commit.vote(post_id , weight, userid) 

포스팅을 올린 시간이 15분이 지난 글이라면 즉시 보팅을 하고, 15분이 지나지 않은 글이라면 15분인 900초에서 포스팅이 작성된 경과 시간을 뺀만큼 time.sleep(900 - after_time) 쉬었다가 보팅을 하도록 하였습니다.

현재 코드를 실행을 하였고, 누군가 소각을 하게 되면 보팅을 하러 갈텐데, 결과가 잘 이루어지는지 아직 확인은 못하였네요.

빨리 누군가 소각을 해주길 바라며... 혹은 이글도 소각할 예정이므로, 직접 소각하여 테스트를 완료해야겠네요.

오늘은 여기에 텔레그램 메시지 전송까지 넣으려고 했는데, 갑자기 텔레그램 봇이 에러가 나서.. 해결을 못하고 있네요.. ㅠㅠ

다음시간에는 복구가 되길 바래 보면서 오늘은 여기에서 마무리하겠습니다.

그럼 여러분들 오늘 하루도 행복하세요.


굳헬로의 스팀 프로그램 일기!! 시리즈

#1 굳헬로의 스팀 프로그램 일기!! 대망의 시작 #1 Python 프로그램 설치 && steemengine 파이썬 api 설치 && 간단한 steemengine 예제

#2 굳헬로의 스팀 프로그램 일기!! 그 두번째 #2 비주얼 스튜디오 코드 프로그램 설치 && 비주얼 스튜디오 코드를 사용하여 파이썬 다루기 && 간단한 steemengine 예제

#3 굳헬로의 스팀 프로그램 일기!! 세번째 #3 스팀엔진 토큰의 정보를 가져오는 findOne() && 누군가의 토큰 사용 내역을 가져오는 get_history() && JSON 데이터 출력

#4 굳헬로의 스팀 프로그램 일기!! 네번째 #4 steemengine Token 클래스 && Token.get_holder() && Token.get_market_info() && Token.get_buy_book() && Token.get_sell_book()

#5 굳헬로의 스팀 프로그램 일기!! 다섯번째 #5 스팀엔진 블록을 뒤져서 원하는 정보를 찾아보자!! 스팀엔진 마켓 거래 내역을 뽑아내는 예제

#6 굳헬로의 스팀 프로그램 일기!! 여섯번째 #6 파이썬으로 스팀엔진 토큰들을 클레임 해보자.

#7 굳헬로의 스팀 프로그램 일기!! 일곱번째 #7 프로그램 일기도 어느덧 1주일!! 드디어 첫 실전!! 무한 반복 작업 수행하기!! 이제 직접 클레임 하는 손맛은 잊자. 무한 반복 자동 클레임!!

#8 굳헬로의 스팀 프로그램 일기!! 여덟번째 #8 텔레그램 봇을 이용해 알림을 받아보자!! && 무한 반복 자동 클레임의 정보를 텔레그램으로 받아보기!!

#9 굳헬로의 스팀 프로그램 일기!! 아홉번째 #9 무한 반복 자동 클레임 업그레이드!! && 토큰 잔고 확인 && 토큰 전송과 토큰 전송 내역을 텔레그램으로 받아보기!!

#10 굳헬로의 스팀 프로그램 일기!! 열번째 #10 토큰 전송내역을 검사하고, 토큰을 전송 받으면 텔레그램으로 알림을 받아보기!!

#11 굳헬로의 스팀 프로그램 일기!! 열한번째 #11 스팀엔진 토큰 임대내역 추적. 쉽지 않았던 머나먼 여정 (1/2)

#12 굳헬로의 스팀 프로그램 일기!! 열두번째 #12 스팀엔진 토큰 임대내역 추적. 쉽지 않았던 머나먼 여정 (2/2) 스팀엔진 토큰 임대내역 추적 완료!!

#13 굳헬로의 스팀 프로그램 일기!! 열세번째 #13 웹 프로그래밍의 시작!! 파이썬을 이용하여 정보를 MySQL 데이터 베이스에 저장해보기!!

#14 굳헬로의 스팀 프로그램 일기!! 열네번째 #14 파이썬을 이용하여 데이터베이스로부터 정보를 가져오기 && 스팀코인판 3대풀 임대내역 데이터베이스 작업 완료!!

#15 굳헬로의 스팀 프로그램 일기!! 열다섯번째 #15 웹 프로그래밍을 이용하여 스팀코인판 3대조합의 임대 내역을 웹으로 확인해보자 !!

#16 굳헬로의 스팀 프로그램 일기!! 열여섯번째 #16 스팀엔진 최신 블록을 검사하여 필요한 정보를 데이터베이스에 저장하기!! 3대 조합의 임대내역을 최신으로 저장하기!!

#17 굳헬로의 스팀 프로그램 일기!! 열일곱번째 #17 조합들이 필요한 기능 드디어 완성!! 자동 클레임과 자동 분배 기능!!

#18 굳헬로의 스팀 프로그램 일기!! 열여덟번째 #18 스팀코인판 3대 조합의 임대내역과 실시간 예상 분배 금액을 웹으로 확인해보자!!

#19 굳헬로의 스팀 프로그램 일기!! 열아홉번째 #19 어제 만든 프로그램 업그레이드!! 개별 상세내역보기 기능 추가!!

#20 굳헬로의 스팀 프로그램 일기!! 어느덧 스물번째 #20 시행착오... 그리고 시련... 하지만 원사마님 덕분으로 엄청난 레벨업!! 감사합니다. 더욱 발전하겠습니다.

#21 굳헬로의 스팀 프로그램 일기!! 스물한번째 #21 레벨업을 했지만 또 다시 찾아온 시련!! 프로그램 결과와 블록체인에 기록된 결과가 다르다!! 어떻게 해야 할까...

#22 굳헬로의 스팀 프로그램 일기!! 스물두번째 #22 오늘부터 새로운 도전!! 자동 보팅 만들기!! 그 첫번째 스팀코인판의 소각글에 자동보팅을 해보자!! 첫번째 시간 (1/N)

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:  

물놀이요? 저도 끼워주세요? ㅎㅎ 즐거운 불금 되시구요^^

함께하시죠~ ㅎㅎㅎ 여기는마산입니다~

물놀이하고 술한잔 가즈아~

너무 자주 확인하지 않아도 될 듯 합니다. 한 10분에 한번씩 해도 문제 없을 듯 합니다.

Posted using Partiko Android

ㅎㅎㅎ 3초마다 검사 돌리다 걍 1분정도로 슬립을 늘렸네요.

Congratulations @goodhello! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You received more than 9000 as payout for your posts. Your next target is to reach a total payout of 10000

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Vote for @Steemitboard as a witness to get one more award and increased upvotes!

제 포스팅에 무조건 풀봇하는 봇 만들어 주세요.ㅎㅎㅎ

Thank you for your continued support towards JJM. For each 1000 JJM you are holding, you can get an additional 1% of upvote. 10,000JJM would give you a 11% daily voting from the 700K SP virus707 account.

Hi @goodhello!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 3.992 which ranks you at #4031 across all Steem accounts.
Your rank has improved 13 places in the last three days (old rank 4044).

In our last Algorithmic Curation Round, consisting of 187 contributions, your post is ranked at #113.

Evaluation of your UA score:
  • You're on the right track, try to gather more followers.
  • The readers like your work!
  • Good user engagement!

Feel free to join our @steem-ua Discord server

union.sct님이 goodhello님을 멘션하셨습니당. 아래 링크를 누르시면 연결되용~ ^^
union.sct님의 [공지] 스판유니언 조합원 대상 24차 큐레이션 수익배분 완료 안내

... 11 19 2차 추가 goodhello/td> 3000 2.50% 11 <td...

잘작동 하시는것 같아요!! 아까 소각하자마자 바로 뿅~ 오시더라구요 ㅎㅎ

또한번 멋진걸 만들어주셨군요. 아쉽게도 본 포스팅은 AAA의 영화나 드라마 리뷰와는 연관이 없는 관계로 다음번에는 aaa 태그 사용의 자제를 부탁드립니다.

감사합니다. ^^