[코딩몰라여] steem-python으로 댓글 알람 만들기 1편 (get_account_history에 대하여)

in #kr-dev7 years ago

코딩몰라여03.png

  컴퓨터가 열심히 딥러닝을 학습 중일 땐 제가 할 수 있는게 없습니다. 학습하는 동안 메인 컴퓨터는 건드릴 수가 없는 것입니다. 그럴 땐, 포스팅을 하는게 최고입니다.

  오늘은 @momoggo님께서 질문하셨던 '댓글이 오면 댓글이 왔다는 알람이 가능한가욧!?' 이 주제입니다.

  만만하게 봤던 기능인데 생각보다 처리해야하는 예외가 많았습니다. 그래서 좀 시간이 걸렸습니다 ' -'); 찬찬히 살펴보도록 할게요.

이미지 026.png


Account History(활동 기록)의 구조



  지난 포스팅들에서 우리는 계정 정보(Account)를 가져온 후에, 필요한 정보를 찾아서 확인하고, 우리가 원하는 행동을 프로그래밍하는 순서로 코드를 작성했습니다.

  이번 시간에 알려드릴 댓글 알림에선 계정의 활동 정보(history)가 필요합니다. 이 정보는 get_account_history라는 함수로 가져올 수 있습니다. 프로그래밍이 익숙하지 않은 분들이 구조를 파악하는데 도움이 되었으면 해서 get_account_history로 가져올 수 있는 정보를 그림으로 그려서 가져왔습니다.

구조.png

  주의하실 점은 get_account_history 함수가 Steem 패키지에도 있고 Account 패키지에도 있습니다. 사용 편의를 위해 포스트에서는 Account 패키지의 함수를 사용할 것입니다. 간단하게 3개만 출력해볼까요?

from steem.account import Account  
  
a = Account('maanya')  
histories = a.get_account_history(index = -1, limit = 2, raw_output=True)  
for history in histories:  
    print(history)


  • index는 활동 기록 번호입니다. -1을 입력하면 가장 최근 기록부터 탐색합니다.
  • limit는 몇 개의 기록을 가져올 것인지를 의미합니다. 0부터 세어나가기 때문에 2를 입력하면 3개의 기록을 가져옵니다.
  • raw_output은 저도 몰라요.. ' -')b (무책임)

  예를 들어 index는 10, limit는 4라면 활동 번호 10, 9, 8, 7, 6에 해당하는 활동 기록을 가져옵니다.


Account History 살펴보기



 몇 가지 결과를 가져와서 간단히 살펴볼게요. 진하게 표시된 부분만 살펴보겠습니다.

[2961, {'trx_id': '6b84808737905a86d14c624a1e545a642dd608f8', 'block': 20660418, 'trx_in_block': 27, 'op_in_trx': 0, 'virtual_op': 0, 'timestamp': '2018-03-14T06:10:03', 'op': ['vote', {'voter': 'maanya', 'author': 'kimthewriter', 'permlink': '3', 'weight': 10000}]}]

2961은 제 활동 기록에 대한 고유 넘버링입니다. 모든 유저분들의 활동이 순서대로 기록되어 계정 활동 기록으로 저장됩니다. 블록체인에 기록된 제 활동 2961번째는 김작가님에 대한 보팅이네요. 이 넘버링은 각자 계정에 기록됩니다.

timestamp는 이 활동이 이루어진 시간입니다.

op를 보시면 어떤 활동을 하였는지와 그에 대한 상세 정보를 확인할 수 있습니다.

2961번 활동은 보팅('vote')이며, 보팅한 사람('voter')은 maanya입니다. 보팅한 글의 저자('author')는 'kimthewriter'님입니다. kimthewriter님의 게시물 링크는 '3' 이며 보팅 파워('weight')는 10000(100%)로 보팅되었습니다.




  다른 history를 한 번 더 살펴볼게요.

[2974, {'trx_id': '2db9b049e73c4e8f60a63d8e6a787deffc5063de', 'block': 20662352, 'trx_in_block': 33, 'op_in_trx': 0, 'virtual_op': 0, 'timestamp': '2018-03-14T07:46:45', 'op': ['comment', {'parent_author': 'maanya', 'parent_permlink': '372jnw', 'author': 'sindoja', 'permlink': 're-maanya-372jnw-20180314t074627071z', 'title': '', 'body': '이렇게 번호를 매기며\n일기를 쓰는게 하나의 트랜드가\n되는건가요 ㅋㅋㅋ', 'json_metadata': '{"tags":["kr"],"app":"steemit/0.1"}'}]}]

  2974번 활동은 게시물/댓글('comment')입니다. 작성자('author')는 sindoja님이시네요. 모 저자('parent_author')가 'maanya'인 것을 확인할 수 있습니다. 만약에 제가 댓글을 달았다면 'author'가 저이고, 'parent_author'는 다른 분이겠죠?

  또 하나 주의하실 점은 댓글이든, 포스팅이든 활동(op)이 'comment'로 나타납니다. 이를 구분하는 방법은 포스팅의 경우 당연히 모 저자('parent_author')가 공란(비어있음, '')입니다. 하지만 댓글인 경우 위의 처럼 모 저자가 있을 수 밖에 없죠. 또 하나의 차이점은 댓글의 경우에는 제목('title')이 없습니다. 내용('body')만 기록됩니다.


코멘트 기록만 가져오기



  vote, comment 외에도 내부 거래소의 거래 기록이나 스팀, 스달의 전송 기록 등을 확인할 수 있습니다. 이런 수많은 기록들 중에서 댓글을 확인하려면 comment 기록만 가져와야합니다. 다행히도 아래와 같이 filter_by 파라미터를 이용하면 간단하게 가져올 수 있습니다. 오예.

from steem.account import Account  
  
a = Account('maanya')  
histories = a.get_account_history(index = -1, limit = 19, filter_by=['comment'], raw_output=True)  
for history in histories:  
    print(history)



  이 코드를 실행하면, 최근 활동 기록 20개 중에 'comment' 활동만 가져올 수 있습니다.
그러나 이것만으로는 댓글 알람을 만들 수 없습니다. 왜냐하면...

결과1.PNG

  이런 식으로 tata1님이 작성해주신 수정 전 댓글과 수정 후 댓글이 같이 검색된다던지, 본인이 작성한 댓글까지 검색되기 때문입니다. comment가 댓글인지 포스트인지 구분하는 과정도 필요하죠.

  보고 계신 여러분들도 이정도 내용이면 많이 지치셨을테니 예외를 처리하는 과정은 다음 편에 이어서 게재하겠습니다 :D 다음 편을 기다려주세요~ (´▽`)


  • 코딩몰라여 1편 [보팅 파워 확인]에 대한 포스팅 아이디어를 주신 @wanabe님께는 1편의 저자보상 스팀달러의 15%를 전달하도록 하겠습니다. 감사합니다. :)

후문.gif

Sort:  

와우..
스팀 봇 등 관련하여,
제가 궁금해하던 내용을 찾아볼 수 있는 실마리가 되는 글을 발견했습니다.
감사.

steem python 언급하신 것 보니,
혹시 스팀이 파이썬으로 작성되어있나요?

댓글 감사합니다. 스팀 자체가 파이썬으로 작성되어있는 것은 아닙니다. 스팀의 API를 python이나 node.js 를 이용하여 사용할 수 있도록 제공되어있습니다. 저는 python이 편해서 이쪽을 선택하였고, node.js로 개발하시는 분들도 상당수 계십니다 :D

대단히 감사..
님의 글들을 나중에라도 찾아보게 될 것 같습니다.

@maanya 님 스달을 두번이나 보내주셨네요 ㅎㅎ 감사합니다!! 몇일만에 블로그가 엄청 번창하셨네요!!

아 그리고 질문이 있는데요.

그.. 텔레그램 알림봇 만들어서 작동되는걸 보구 컴터 끄고 잤거든요.
담날 사람들모아놓고(컴터 꺼진상태) 이거 신기하다고 보여주며 /rolling 썼는데 아무일없니요 ㅋㅋ
혹시 그 제가 코딩 작성했던 컴퓨터가 계속 켜져있어야 텔레그램에서 명령을 받는건가요??

네, 지금은 테스트하셨던 컴퓨터가 계속 켜져있어야해요! 머지않아 구글 앱 엔진 같은 곳에 올려서 컴퓨터가 꺼져도 동작할 수 있는 환경을 안내해드리려고 합니다 :)

와.. 모르는게 없으시네요 답변감사합니다^^

부끄럽습니다.. -0-

와우..

그런 것이 가능하군요..

기대 만땅 입니다.

너무 잘 설명해 주셔서 감사합니다~

빨리 따라 해보고 싶은데 시간이 ㅠㅜ

ㅎㅎㅎ 언제든지 해보시고 어려운 부분은 물어봐주세요!

코딩ㅎㅎ 대학때 잠깐배우고 내분야가 아니라고 생각했었는데 요즘 프로그래밍이 이슈라 파이썬을 공부하고있었어요
스티밋가입한지 얼마안됐지만 좋은정보 얻고 갑니다 앞으로도 자주올게요 ㅎㅎ

요즘엔 초등학생들도 배우는 코딩... 빨리 학원을 차려야하는데 말이죠.

이....이계의 언어.....털썩...

배작가님의 뇌를 말랑말랑하게 만들어드리는 효과를...!

제가 알고 있는 말..랑과 개념이 다른 것 같습니다. ㅜㅜ

말랑해지는게 아니라 퍼져서 삶아지는 느낌..? ㅋㅋㅋ

아무래도 코딩은.. 제가 배워서 아는것보다
아들을 공부시키는게 더 빠를것 같습니다. ^^ㅋㅋㅋ

아드님은... ㅋㅋㅋㅋ 요즘 워낙 한국에서도 프로그래밍이 필수 수업이라 ㅜㅠ 가능한거라면...

코딩배우고 있는데 재미있네요^^ 자주 들려서 배워갈게요~~

어서오세요❤️ 감사합니다~~

c밖에 몰라서.. 봐도잘모르겠네요 ㅜㅜ 파이썬 공부도 시간나면 해야겠어요..

시간 날 때 보다는, 필요할 때 하시면 되옵니다 :D

역주행해서 아나콘다랑 파이참 설치하고 환경설정까지 했는데
벌써 혼란스럽네요... @_@

어렵거나 궁금하신 부분은 언제든지 질문을! (´▽`)

@maanya님은 어떤걸 보고 공부하시나요??

예전엔 책 같은게 있는지 찾아보곤 했는데 지금은 그냥 인터넷 검색으로 대부분 해결해요 ‘ㅁ’/

오호....얼른 기초를 다잡아야겠군요!! ㅎㅎ

Coin Marketplace

STEEM 0.18
TRX 0.16
JST 0.030
BTC 62934.10
ETH 2452.99
USDT 1.00
SBD 2.66