굳헬로의 스팀 프로그램 일기!! 쉰한번째 #51 스팀코인판 조합의 자동 보팅시스템 제작 4번째 시간!! 블록을 검사하여 설정된 보팅룰로 보팅하기!!

in #sct5 years ago

steem.jpg

토요일 잘 보내고 계신가요??

제가 사는 곳은 이제 태풍이 다 지나갔는지, 비도 그치고 바람도 약해지고 있네요.

여러분들도 아무쪼록 태풍 피해 없으시기 바랍니다.

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


어제는 스팀코인판 원피스 조합의 자동보팅 시스템을 만들기 위해 각 조합원들의 보팅룰을 가지고 와서 셋팅하는 작업까지 완료 했었는데요.

각 조합원 별로 룰셋을 member_list에 저장하는데 성공하였습니다.

이제 스팀 블록을 검사하면서 각 조합원들의 포스팅을 검사하고 룰셋에 맞도록 보팅 하는 코드를 짜야 하는데요.

steem = Steem()
last_block_num = steem.last_irreversible_block_num 

with open(filename,'r',encoding="utf-8") as load_block_num: 
    start_block_num = json.load(load_block_num)['block_num']

for block_num in range(start_block_num + 1, last_block_num + 1):
    block = steem.get_block(block_num)

    #블록을 검사하여 룰셋을 적용하는 코드

    block_num_json = {"block_num": block_num}
    with open(filename,'w',encoding="utf-8") as save_block_num: 
        json.dump(block_num_json, save_block_num, ensure_ascii=False, indent="\t") 

위의 스팀 블록을 검사하는 코드에 룰셋을 적용하는 코드를 만들어 보도록 하겠습니다.

어제 3가지정도 조건을 설정해 보았는데요.

  1. 포스팅 여부 확인 ( 포스팅과 댓글인지 검사 )
  2. 포스팅의 저자 확인 ( 조합원인지 여부 검사 )
  3. 포스팅의 태그 확인 ( 소각글인지 비소각글인지 여부 검사 )

1번부터 하나씩 코드를 짜보았습니다.

for trans in block['transactions']:
    if trans['operations'][0][0] == 'comment':   
        if trans['operations'][0][1]['parent_author'] == "" :   

먼저 하나의 블록안에는 여러개의 트랜잭션이 존재하기 때문에, transactions를 각각 검사하여야 합니다.

transactions 내에서 포스팅과 댓글은 operationscomment로 동일하기 때문에, 포스팅 여부를 확인하기 위해 parent_author검사를 수행하도록 하였습니다.

원래 title 즉 제목이 있으면 포스팅이고 제목이 없으면 댓글로 검사를 진행하였는데, tokenbb 같은곳에서 올라오는 comment는 댓글임에도 불구하고 제목이 있더라구요.

그래서 parent_author를 검사하는걸로 변경을 하였습니다.

이제 2번 포스팅의 저자를 확인해 보도록 하겠습니다.

for member in member_list :   
    if trans['operations'][0][1]['author'] == member['steem_id'] :
        permlink = trans['operations'][0][1]['permlink']                        
        post_id = trans['operations'][0][1]['author'] + "/" + permlink
        post = Post(post_id)
        post_json = post.export()

        if post_json['created'] == post_json['last_update'] :

조합원들의 정보가 들어 있는 member_list로부터 포스팅의 저자 검사를 하여 조합원 글 여부를 확인합니다.

그리고 여기에 하나더 포스팅이 새글인지 수정한 글인지 여부를 확인하기 위해 포스팅의 createdlast_update가 같은지 여부를 검사합니다.

이제 3번 포스팅의 태그를 검사해 보겠습니다.

tags = trans['operations'][0][1]['json_metadata']             
tags = json.loads(tags)
for tag in tags['tags'] :
    if tag == "s" :
        weight = member['s_vp']        
    elif tag == "bs" :
        weight = member['bs_vp']    

포스팅의 태그는 operationsjson_metadata 에서 가져올 수 있더라구요.

원피스 보팅 룰셋이 소각글은 태그가 s 비소각 글은 bs 태그를 검사하여 보팅 웨이트를 설정하는 걸로 자동보팅을 위한 모든 설정이 마무리 되었습니다.

아!! 여기서 추가로 하나 더!! 보팅 여부 검사 코드까지 넣어보기로 했습니다.

for voter in post_json['active_votes'] :
     if userid in voter['voter'] :
        #이미 보팅 완료 -> 보팅 안함

이미 보팅이 완료가 된 포스팅이라면 보팅을 건너 뜁니다.

그리고 또 하나 필요한것이 보팅 시간이죠.

after_time = (datetime.datetime.utcnow() - post_json['created']).seconds
time.sleep(300 - after_time)

현재 시간과 포스팅 작성 시간의 차를 계산하여, 포스팅 작성 후 5분후에 보팅이 되도록 슬립을 시킵니다.

마지막으로 모든 검사가 끝내고 설정된 보팅웨이트로 보팅을 합니다.

user.commit.vote(post_id , weight, "team1p")

끝!!

은 아니고, 주말이라 다른 일로 바쁘다보니 아직 실전 테스트를 돌려보진 못하였네요.

거기다 하필 내일은 벌초까지 가야해서... ㅠㅠ

일단 주말동안 테스트 계정으로 테스트 한 후 다음주 부터 실전에 투입을 시켜볼까 합니다.

그럼 여러분들 오늘 토요일 하루도 즐겁게 보내시고~ 행복한 주말 되길 바랍니다~


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

#1 Python 프로그램 설치 && steemengine 파이썬 api 설치 && 간단한 steemengine 예제

#2 비주얼 스튜디오 코드 프로그램 설치 && 비주얼 스튜디오 코드를 사용하여 파이썬 다루기 && 간단한 steemengine 예제

#3 스팀엔진 토큰의 정보를 가져오는 findOne() && 누군가의 토큰 사용 내역을 가져오는 get_history() && JSON 데이터 출력

#4 steemengine Token 클래스 && Token.get_holder() && Token.get_market_info() && Token.get_buy_book() && Token.get_sell_book()

#5 스팀엔진 블록을 뒤져서 원하는 정보를 찾아보자!! 스팀엔진 마켓 거래 내역을 뽑아내는 예제

#6 파이썬으로 스팀엔진 토큰들을 클레임 해보자.

#7 드디어 첫 실전!! 무한 반복 작업 수행하기!! 이제 직접 클레임 하는 손맛은 잊자. 무한 반복 자동 클레임!!

#8 텔레그램 봇을 이용해 알림을 받아보자!! && 무한 반복 자동 클레임의 정보를 텔레그램으로 받아보기!!

#9 무한 반복 자동 클레임 업그레이드!! && 토큰 잔고 확인 && 토큰 전송과 토큰 전송 내역을 텔레그램으로 받아보기!!

#10 토큰 전송내역을 검사하고, 토큰을 전송 받으면 텔레그램으로 알림을 받아보기!!

#11 스팀엔진 토큰 임대내역 추적. 쉽지 않았던 머나먼 여정 (1/2)

#12 스팀엔진 토큰 임대내역 추적. 쉽지 않았던 머나먼 여정 (2/2) 스팀엔진 토큰 임대내역 추적 완료!!

#13 웹 프로그래밍의 시작!! 파이썬을 이용하여 정보를 MySQL 데이터 베이스에 저장해보기!!

#14 파이썬을 이용하여 데이터베이스로부터 정보를 가져오기 && 스팀코인판 3대풀 임대내역 데이터베이스 작업 완료!!

#15 웹 프로그래밍을 이용하여 스팀코인판 3대조합의 임대 내역을 웹으로 확인해보자 !!

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

#17 조합들이 필요한 기능 드디어 완성!! 자동 클레임과 자동 분배 기능!!

#18 스팀코인판 3대 조합의 임대내역과 실시간 예상 분배 금액을 웹으로 확인해보자!!

#19 어제 만든 프로그램 업그레이드!! 개별 상세내역보기 기능 추가!!

#20 시행착오... 그리고 시련... 하지만 원사마님 덕분으로 엄청난 레벨업!! 감사합니다. 더욱 발전하겠습니다.

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

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

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

#24 스팀코인판 3대조합의 임대내역을 웹으로 확인해보자!! 업그레이드!!

#25 스팀코인판 3대조합의 임대내역을 웹으로 확인해보자!! 업그레이드 2!! 그리고 개발 예정 사항 공개!!

#26 드디어 첫 실전 가동 준비중... 스팀코인판 유니온 조합의 수익 자동분배 작업 완료중...

#27 스팀코인판 유니온 조합 첫 자동 분배 결과!! 그리고 보완!!

#28 스팀코인판 유니온 조합 자동 분배 프로그램의 결과를 웹으로 확인해 보자!!

#29 스팀코인판 유니온 조합 자동 분배 상황을 텔레그램으로 확인!! 임내 확인 페이지 정렬 기능 추가!!

#30 스팀코인판 조합의 임대량 페이지 정렬 기능 업그레이드!! 그리고 임대량 파이 차트 완성!!

#31 스팀코인판 조합의 하루하루 임대량 변화를 차트로 확인해보자!!

#32 트리플A를 이용하면서 그동안 번거로웠던 클레임 스테이킹 전송 작업 이젠 안녕!! 자동으로 AAA를 전송하고 클레임하고 스테이킹을 해보자!!

#33 굳헬로가 만든 스팀코인판 조합 자동 클레임과 자동 분배 프로그램 원피스 조합에도 사용 개시!!

#34 스팀코인판 조합 원피스 자동 클레임과 자동 분배 프로그램 업그레이드!! 텔레그램 봇으로 그룹 메시지를 받아보자!!

#35 스팀에서 새글 정보를 텔레그램으로 받아보자!! 함께 정보를 받아보는 텔레그램 그룹방 개설!!

#36 스팀엔진 블록 검사 놓치는 블록이 없도록 해보자!! 파일 입출력 기능 활용!!

#37 스팀엔진 블록을 검사하여 본인글의 댓글을 텔레그램 알람으로 받아보자!!

#38 드디어 완성!! 보팅 알람봇!! 스팀엔진 블록을 검사하여 본인글에 보팅이 찍히면 텔레그램 알람으로 받아보자!!

#39 파이썬과 텔레그램을 이용한 챗봇 프로그래밍의 시작!! 그 첫번째!! 챗봇과 대화를 해보고,특정 메시지에 반응을 해보자!!

#40 파이썬과 텔레그램을 이용한 챗봇 프로그래밍!! 파이썬에 CommandHandler를 사용하여 특정 명령어를 내려보자!!

#41 굳헬로의 텔레그램 보팅알람 서비스 일단은 완성!! 앞으로 다양한 기능 추가 예정!! 사용해보고 후기 남겨주세요!!

#42 업비트의 원화 마켓 코인들의 시세를 텔레그램으로 받아보자!! /get 비트코인, /get 스팀, /get 코인이름 명령어 등록!!

#43 업비트의 원화 마켓 코인들의 시세를 텔레그램으로 받아보자2!! 알려줘 비트코인, 알려줘 스팀 노노!! 이제 바로 비트코인 스팀 명령어 등록!!

#44 매일 매일 새로운 기능이 추가되고 있는 굳스팀 챗봇!! 챗봇을 이용하여 스팀엔진 토큰의 시세 정보를 받아보자!!

#45 텔레그램 챗봇을 이용하여 최신 코인 주요 뉴스를 받아보자!! 굳스팀 챗봇 소개!!

#46 굳스팀 텔레그램 챗봇 새 기능 추가!! 굳스팀 챗봇을 이용하여 최신 헤드라인 뉴스 정보를 받아보자!!

#47 뉴스를 구독해보자!! 명령어 입력없이 특정 시간 챗 봇이 뉴스를 자동으로 보내 드립니다.

#48 본격적으로 스팀코인판 조합의 자동 보팅시스템 제작 돌입!! 기본 설계 및 보팅 설정 페이지 작업 완료!!

#49 스팀코인판 조합의 자동 보팅시스템 제작 2번째 시간!! 보팅 설정에 따라 각 조합원 별로 보팅룰을 적용해 보자!!

#50 스팀코인판 조합의 자동 보팅시스템 제작 3번째 시간!! 설 정된 보팅룰을 파이썬 자동 보팅 프로그램에 가져오기!!

Sort:  

jcar토큰 9월 구독 보팅입니다.
날마다 좋은 하루 되세요.

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 4.012 which ranks you at #3993 across all Steem accounts.
Your rank has improved 61 places in the last three days (old rank 4054).

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

Evaluation of your UA score:
  • Some people are already following you, keep going!
  • The readers like your work!
  • Try to work on user engagement: the more people that interact with you via the comments, the higher your UA score!

Feel free to join our @steem-ua Discord server

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.033
BTC 64507.66
ETH 3080.07
USDT 1.00
SBD 3.85