컴퓨터가 열심히 딥러닝을 학습 중일 땐 제가 할 수 있는게 없습니다. 학습하는 동안 메인 컴퓨터는 건드릴 수가 없는 것입니다. 그럴 땐, 포스팅을 하는게 최고입니다.
오늘은 님께서 질문하셨던 '댓글이 오면 댓글이 왔다는 알람이 가능한가욧!?' 이 주제입니다.
만만하게 봤던 기능인데 생각보다 처리해야하는 예외가 많았습니다. 그래서 좀 시간이 걸렸습니다 ' -'); 찬찬히 살펴보도록 할게요.
Account History(활동 기록)의 구조
지난 포스팅들에서 우리는 계정 정보(Account)를 가져온 후에, 필요한 정보를 찾아서 확인하고, 우리가 원하는 행동을 프로그래밍하는 순서로 코드를 작성했습니다.
이번 시간에 알려드릴 댓글 알림에선 계정의 활동 정보(history)가 필요합니다. 이 정보는 get_account_history라는 함수로 가져올 수 있습니다. 프로그래밍이 익숙하지 않은 분들이 구조를 파악하는데 도움이 되었으면 해서 get_account_history로 가져올 수 있는 정보를 그림으로 그려서 가져왔습니다.
주의하실 점은 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' 활동만 가져올 수 있습니다.
그러나 이것만으로는 댓글 알람을 만들 수 없습니다. 왜냐하면...
이런 식으로 tata1님이 작성해주신 수정 전 댓글과 수정 후 댓글이 같이 검색된다던지, 본인이 작성한 댓글까지 검색되기 때문입니다. comment가 댓글인지 포스트인지 구분하는 과정도 필요하죠.
보고 계신 여러분들도 이정도 내용이면 많이 지치셨을테니 예외를 처리하는 과정은 다음 편에 이어서 게재하겠습니다 :D 다음 편을 기다려주세요~ (´▽`)