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

in sct •  4 years ago 

steem.jpg

어느덧 이번주도 불금이 되었네요.

어제 하루 잠시 날씨가 좋았는데, 오늘 오후에는 태풍이 올라온다고...

내일은 태풍이 우리나라를 직통하면서 크고 작은 피해를 남길것 같은데, 각별히 조심하시기 바랍니다.

그럼 오늘도 프로그램 일기 남겨봅니다.


어제는 스팀코인판 원피스 조합의 자동보팅 시스템 제작 2번째 시간으로 조합의 보팅 룰에 따라 각 조합원 별 보팅 룰을 적용하여 웹 페이지로 확인하는 코드를 짜보았습니다.

오늘은 그 룰에 따라 자동 보팅이 될 수 있도록 파이썬 코드를 짜보도록 하겠습니다.

먼저 설정된 룰을 파이썬으로 어떻게 가지고 올지가 관건이었는데...

처음 생각한것은 저장해둔 데이터베이스로부터 보팅 룰을 가지고 와서 조합원별로 보팅 룰을 설정해서 사용하려고 했는데, 보팅 룰은 때에 따라 변경될 수 있기에, 조합원별 보팅 설정이 스팀 블록을 검사할때마다 이루어져야 해서 너무 비효율적이란 생각이 들더라구요.

그래서 다음으로 생각한것은 아예 조합원 별 보팅룰을 데이터 베이스에 저장해두고 불러와서 사용하는 방법이었습니다.

위와 같이 데이터베이스를 만들어 보팅룰이 변경되거나, 조합원의 임대 상황에 변화가 있을때마다 자동으로 갱신되도록 만들면 되겠더라구요.

그래서 그 코드를 짜고 있는데, 문득 든 생각이 이러면 왠지 일을 2번 하는것 같다는....

그때 좋은 아이디어가 떠오르더라구요.

어제 만든 각 조합원의 보팅 설정 결과 웹 페이지를 이용하면 되겠다는 생각이 들었습니다.

바로 작업에 들어갔지요.

requestsBeautifulSoup를 이용하여 보팅 설정 결과 웹 페이지를 가지고 와서 테이블에 들어 있는 내용을 파싱하여 각 조합원 별로 보팅 룰셋을 저장하는 코드를 만들었습니다.

url = "http://heinz.wo.tc/sct2/set_vote_result.php"
data = {'action': 'team1p'} 
res = requests.post(url, data=data)
soup = BeautifulSoup(res.text, 'html.parser')  
member_list = []

for table_row in soup.select("table tr"):
    cells = table_row.findAll('td')

    if len(cells) > 0:
        if cells[0].text is not "" :
            steem_id = cells[2].text.strip()
            s_vp = cells[4].text.strip()
            bs_vp = cells[5].text.strip()
            member = {'steem_id': steem_id, 's_vp': s_vp, 'bs_vp': bs_vp}
            member_list.append(member)  

member_list를 출력하면

steem_id : deer3 s_vp : 100% bs_vp : 100%
steem_id : zzings s_vp : 100% bs_vp : 100%
steem_id : jjm13 s_vp : 100% bs_vp : 100%
steem_id : tradingideas s_vp : 100% bs_vp : 100%
steem_id : naha s_vp : 100% bs_vp : 80%
steem_id : relaxkim s_vp : 100% bs_vp : 80%
steem_id : vip s_vp : 100% bs_vp : 70%
steem_id : donekim s_vp : 100% bs_vp : 70%
steem_id : goodhello s_vp : 100% bs_vp : 70%
steem_id : isaaclab s_vp : 90% bs_vp : 45%
steem_id : fenrir78 s_vp : 90% bs_vp : 45%
steem_id : lovelyyeon s_vp : 100% bs_vp : 90%
steem_id : jayplayco s_vp : 80% bs_vp : 40%
steem_id : kibumh s_vp : 80% bs_vp : 40%
steem_id : sonki999 s_vp : 80% bs_vp : 40%
steem_id : lucky2 s_vp : 100% bs_vp : 60%
steem_id : oldstone s_vp : 60% bs_vp : 30%
steem_id : ukk s_vp : 100% bs_vp : 50%
steem_id : ryanhkr s_vp : 32% bs_vp : 16%

보팅룰 설정 결과 페이지로부터 테이블에 들어 있는 내용을 파싱하여 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") 

우선 최신 블록을 계속 검사해 나가기 위해, 검사 완료한 블록 넘버를 파일로부터 읽어와 시작 블록으로 지정하고, 최신 블록까지 검사를 하면서 검사가 끝난 블록넘버는 다시 파일에 저장해 이 작업을 계속 반복하면서 최신 블록을 검사하는 코드입니다.

이제 이 사이에 블록을 검사하는 코드를 만들고 조건에 맞으면 보팅을 하는 될 것 같네요.

먼저 필요한 조건들을 설정해 보았습니다.

스팀 블록에는 수많은 정보들이 저장되고 있는데,

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

일단 위 3가지를 검사해야 하는데...

아 여기서 하나 더 포스팅이 새 포스팅인지 포스팅 수정인지 여부도 확인해야 할 것 같네요.

추가로 포스팅에 보팅이 되어 있는지 여부도 검사해주면 좋을것 같고... 어쨋든 고려할게 많은 것 같습니다.

그래도 대충 필요한 조건들의 설계가 끝난것 같으니 이제 열심히 코드를 짜봐야 겠네요.

그럼 다음 시간에는 위의 조건들으 모두 클리어 하여 찾아올 수 있도록 힘내보겠습니다.

신나는 불금 보내시고~ 행복한 주말 되세요~


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

#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)

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

#24 굳헬로의 스팀 프로그램 일기!! 스물네번째 #24 스팀코인판 3대조합의 임대내역을 웹으로 확인해보자!! 업그레이드!!

#25 굳헬로의 스팀 프로그램 일기!! 스물다섯번째 #25 스팀코인판 3대조합의 임대내역을 웹으로 확인해보자!! 업그레이드 2!! 그리고 개발 예정 사항 공개!!

#26 굳헬로의 스팀 프로그램 일기!! 스물여섯번째 #26 드디어 첫 실전 가동 준비중... 스팀코인판 유니온 조합의 수익 자동분배 작업 완료중...

#27 굳헬로의 스팀 프로그램 일기!! 스물일곱번째 #27 스팀코인판 유니온 조합 첫 자동 분배 결과!! 그리고 보완!!

#28 굳헬로의 스팀 프로그램 일기!! 스물여덟번째 #28 스팀코인판 유니온 조합 자동 분배 프로그램의 결과를 웹으로 확인해 보자!!

#29 굳헬로의 스팀 프로그램 일기!! 스물아홉번째 #29 스팀코인판 유니온 조합 자동 분배 상황을 텔레그램으로 확인!! 임내 확인 페이지 정렬 기능 추가!!

#30 굳헬로의 스팀 프로그램 일기!! 서른번째 #30 스팀코인판 조합의 임대량 페이지 정렬 기능 업그레이드!! 그리고 임대량 파이 차트 완성!!

#31 굳헬로의 스팀 프로그램 일기!! 서른한번째 #31 스팀코인판 조합의 하루하루 임대량 변화를 차트로 확인해보자!!

#32 굳헬로의 스팀 프로그램 일기!! 서른두번째 #32 트리플A를 이용하면서 그동안 번거로웠던 클레임 스테이킹 전송 작업 이젠 안녕!! 자동으로 AAA를 전송하고 클레임하고 스테이킹을 해보자!!

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

#34 굳헬로의 스팀 프로그램 일기!! 서른네번째 #34 스팀코인판 조합 원피스 자동 클레임과 자동 분배 프로그램 업그레이드!! 텔레그램 봇으로 그룹 메시지를 받아보자!!

#35 굳헬로의 스팀 프로그램 일기!! 서른다섯번째 #35 스팀에서 새글 정보를 텔레그램으로 받아보자!! 함께 정보를 받아보는 텔레그램 그룹방 개설!!

#36 굳헬로의 스팀 프로그램 일기!! 서른여섯번째 #36 스팀엔진 블록 검사 놓치는 블록이 없도록 해보자!! 파일 입출력 기능 활용!!

#37 굳헬로의 스팀 프로그램 일기!! 서른일곱번째 #37 스팀엔진 블록을 검사하여 본인글의 댓글을 텔레그램 알람으로 받아보자!!

#38 굳헬로의 스팀 프로그램 일기!! 서른여덟번째 #38 드디어 완성!! 보팅 알람봇!! 스팀엔진 블록을 검사하여 본인글에 보팅이 찍히면 텔레그램 알람으로 받아보자!!

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

#40 굳헬로의 스팀 프로그램 일기!! 마흔번째 #40 파이썬과 텔레그램을 이용한 챗봇 프로그래밍!! 파이썬에 CommandHandler를 사용하여 특정 명령어를 내려보자!!

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

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

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

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

#45 굳헬로의 스팀 프로그램 일기!! 마흔다섯번째 #45 텔레그램 챗봇을 이용하여 최신 코인 주요 뉴스를 받아보자!! 굳스팀 챗봇 소개!!

#46 굳헬로의 스팀 프로그램 일기!! 마흔여섯번째 #46 굳스팀 텔레그램 챗봇 새 기능 추가!! 굳스팀 챗봇을 이용하여 최신 헤드라인 뉴스 정보를 받아보자!!

#47 굳헬로의 스팀 프로그램 일기!! 마흔일곱번째 #47 뉴스를 구독해보자!! 명령어 입력없이 특정 시간 챗 봇이 뉴스를 자동으로 보내 드립니다.

#48 굳헬로의 스팀 프로그램 일기!! 마흔여덟번째 #48 본격적으로 스팀코인판 조합의 자동 보팅시스템 제작 돌입!! 기본 설계 및 보팅 설정 페이지 작업 완료!!

#49 굳헬로의 스팀 프로그램 일기!! 마흔아홉번째 #49 스팀코인판 조합의 자동 보팅시스템 제작 2번째 시간!! 보팅 설정에 따라 각 조합원 별로 보팅룰을 적용해 보자!!

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:  

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.003 which ranks you at #4024 across all Steem accounts.
Your rank has improved 1 places in the last three days (old rank 4025).

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

Evaluation of your UA score:
  • Some people are already following you, keep going!
  • You have already convinced some users to vote for your post, keep trying!
  • 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