컴퓨터가 열심히 딥러닝을 학습 중일 땐 제가 할 수 있는게 없습니다. 학습하는 동안 메인 컴퓨터는 건드릴 수가 없는 것입니다. 그럴 땐, 포스팅을 하는게 최고입니다.
오늘은 @momoggo님께서 질문하셨던 '댓글이 오면 댓글이 왔다는 알람이 가능한가욧!?' 이 주제입니다.
만만하게 봤던 기능인데 생각보다 처리해야하는 예외가 많았습니다. 그래서 좀 시간이 걸렸습니다 ' -'); 찬찬히 살펴보도록 할게요.
지난 포스팅들에서 우리는 계정 정보(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는 10, limit는 4라면 활동 번호 10, 9, 8, 7, 6에 해당하는 활동 기록을 가져옵니다.
몇 가지 결과를 가져와서 간단히 살펴볼게요. 진하게 표시된 부분만 살펴보겠습니다.
[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 다음 편을 기다려주세요~ (´▽`)