[코딩몰라여] steem-python으로 포스트와 댓글 실시간으로 읽어오기 기초

in kr-dev •  2 years ago 

coding.png

일요일이다. 일요일 밤부터 월요일 아침까지 피드 윗부분에 떠있는 내 글을 보게 될, 공돌이가 아닌 자들에게 고통을 선사할 코딩 글을 쓸 일요일이다.

@afinesword님의 술 포스트 인트로 표절. 당신이 술을 좋아한다면 매 주 목요일에 챙겨보아야할 것이다.

  오늘은 쉬어가는 편에서 예고했던대로 스팀 블록체인에 연결하여 포스트와 댓글을 실시간(실제로는 약 2분 정도의 차이가 남)으로 가져오는 방법을 알아보도록 하겠습니다. 이전의 내용들이 누군가가 남긴 흔적을 염탐 및 뒷조사하는 변태 같은 코드들이었다면, 오늘 배울 내용은 체인 전부를 쳐다보는 개변태 같은 코드입니다. 우리 모두 염탐 변태가 되어보도록 합시다.

  이제부턴 steem-python 라이브러리에 대한 지식도 필요하지만 파이썬 언어 자체의 지식도 어느정도 필요합니다. 그러나 제가 어떤 사람입니까! 여러분들의 고민과 고통을 덜어줄 사람이 아니겠습니까? 그래서 어려운 것을 아주 쉽게 설명드릴 것이 아니라 그냥 눈감고 넘어가도록 하겠습니다.

제가 '쉬워요!' 하면서 츄라이~ 츄라이~ 해봐야
여러분들이 '아, 안 사요. 안 사.' 할 것이라는 걸 압니다.

ansayo.jpg



# 스팀 블록 체인의 실시간 감시는 의외로 쉽다.


  steem-python의 기술문서를 보신 분이 계실까요? 놀랍게도 총 63페이지 중 11번째 페이지에 자동 보팅 봇을 만드는 코드가 있습니다. 자세히는 특정 사용자를 언급(mention, @)하는 포스트를 자동으로 보팅하도록 만드는 코드입니다.

심지어 짧습니다. 와! 16줄!
어차피 안보실 거 알아서 이제 사진으로 작게 가져왔습니다.

source01.png
코드 설명이요? 아 몰랑. 하다보면 아시게 될거양.

저 코드에서 스팀 체인을 감시하면서
포스트와 댓글을 받아오는 코드는 단 두 줄입니다.

b = Blockchain()  
stream = map(Post, b.stream(filter_by=['comment']))



여러분은 이 두 줄만으로도 저와 같은 스팀잇 염탐하는 변태가 되실 수 있습니다. 이전 편에서 포스트와 댓글은 모두 합쳐서 'comment' 로 나타난다고 말씀 드렸던 것 기억나시나요? 그 점을 머릿 속에 기억하고 계속해서 살펴봅시다.

# KR만 염탐하는 방법


  아무리 여러분과 제가 변태라고 하더라도 취향은 있기 마련입니다. 스팀잇에도 이미 커밍아웃하신 변태분들이 꽤 많죠. 누가 있냐면... 본인이 언급되었을까봐 두근두근하신 당신은 확정인 것 같습니다.

trap1.jpg

  우리는 스팀잇 염탐 변태 중에서도 우리 자신을 위해 KR만 염탐하는 변태가 될 필요성이 있습니다. 취향을 설정해보도록 하겠습니다. 포스트나 댓글이 한글로 이루어져있는지 확인하는 과정은 너무 많은 시간을 소모합니다. 그러므로 게시물의 태그를 확인하는 것이 적당한 방법입니다.

아래의 코드는 읽어들인 게시물이 kr 태그를 포함하고 있으면 작성 시간, 작성자, 내용을 출력하는 코드입니다. 댓글은 포스트의 첫번째 태그를 자신의 태그로 갖습니다.

예시) 포스트의 태그가 kr-newbie, kr, kr-dev 순서로 작성되어있으면 댓글은 kr-newbie 태그를 갖습니다.

< 코드 >
result03.PNG

< 결과 >
결과01.png

# 그래도 녹록치 않은 부분은 있다.


  몇 줄 안되는 코드로 즐겁게 KR을 염탐하려는 당신, 아마 1분도 지나지 않아 에러를 만나게 될 것입니다.

그 에러는 아마도

result02.PNG
이것일 가능성이 가장 크고

result04.PNG
우리의 염탐기 프로그램이 읽어들이기 전에 작성자가 삭제해버려서 발생할 수도 있습니다. 이 부분에 대해선 머지 않은 다음 시간에 알아보도록 하겠습니다. :)

적절한 끊기! 뿅.

cc4.jpg


  정해진 날짜에 올리는 컨텐츠가 아니다보니 얘가 연재를 접었나? 하는 생각이 들 정도로 코딩몰라여 시리즈가 방치된게 아닌가 하는 생각이 들었습니다.

  따라서 제가 진행 중인 유일한 연재인 코딩몰라여 시리즈는 못해도 일주일에는 한 번, 일요일에는 올리기로 했습니다. 표절 인트로는 이를 암시한 저만 아는 복선이었습니다. ' -');

  날짜를 정해둔 포스팅이기 때문에 오늘처럼 분량이 조절될 수도 있고 휴재 공지를 올릴 수도 있겠지만, 연재물에는 그러한 독자 배려의 약속도 필요한게 아닐까 싶습니다. 잘 부탁드립니다. (_ _)

  그리고 코딩몰라여 시리즈는 전용 웹사이트(https://codingmola.herokuapp.com/)에 기록하고 있으니 한 번에 보고 싶으실 때엔 웹사이트를 방문해주시면 편하게 보실 수 있습니다.

그리고!

@hellocrypto 님께서 스팀봇을 만드는 과정을 알려주는 야매코딩 시리즈를 시작했다는 소식을 들으셨나요? 따로 모아두신 페이지는 없으나, 최근 포스트가 야매코딩 시리즈의 시작 파트입니다.

개발 언어는 저랑 같은 파이썬을 기반으로 하고 있습니다. 개발 환경을 저는 PyCharm을 사용하는 반면에 크립토님은 Google Cloud Compute Engine을 사용하셔서 컴퓨터를 켜놓지 않아도 실행이 가능합니다. 디스크의 용량 제한에 대해서도 부담이 없습니다. 훨씬 따라해보시기 편하리라 생각해요.

저도 따라해보고 있습니다. :D

모두가 어엿한 염탐 변태가 되길 바라며.
안녕히!

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:  

오우 영광입니다!

하지만...

afinesword님의 술 포스트 인트로 표절. 당신이 술을 좋아한다면 매 주 목요일에 챙겨보아야할 것이다.

이 문장 아래로는 무슨 말인지 1도 모르겠습니다!
한국어 맞나요...

문송합니다...

아닙니다. 몰라도 괜찮습니다.
공학자는 돈줄이 되는 문과 여러분을 환영합니다.

그 피의 숙명! 죠~~~~~~~~~~죠우!

  ·  2 years ago (edited)

바로 알아보시다니... 혼모노가 여기에...

소수점-산스크리스트 표기법으로는 홈-모노라고 하셔야 합니다
홈-모노라뇨? 전 그냥 기억력이 좋을 뿐입니다.

기억에 있다는 것부터 혼모노인건데요? -ㅅ-


야! 나는 피카추다!

개발관련 포스팅은 어떻게 해야할지 고민이 많이 되던데... 역시 준비된 마아냐님 뭔가 다르네요.^^

준비됐다는거 다 소진된지 오래된 잉여입니다. 핫핫.
방금 에디터를 켜고 방금 작성한 따끈한 것이죠 -ㅅ-;;
오늘은 휴일이라 막차 안놓치셨겠죠? +,.+

넵!! 오늘은 집근처를 떠나지 않았답니다.ㅋㅋ

안사요!
ㅋㅋㅋㅋㅋㅋ

코딩은 재밌으면서도 어렵고, 복잡하면서도 간단하고, 참으로 변태스러운 학문같네요 ㅋㅋ

아, 관심 좀 가져보고 시작해봐야 할까요? 파이썬 한번도 안다뤄봤는데... ㅎㅎㅎ
점심시간에 틈틈이 지난 글부터 정독해봐야겠습니다. ^^

일단 안사...요

보팅은 내일와서 할게요

염탐 뵨태!!!

보자보자... 핑크와 보라색의 적절한 조화군요.. 후후...

와 제가 왜 이걸 읽고 있는거죠...

저의 매력에 빠지셨거나(헛소리)
같은 염탐 변태이신 것

차라리 후자를 택하겠습니다..

부끄러워하시는군요? ' -')b

들켰?

음 저도 관심이 생기는 분야인데 관심 있게 찾아보겠습니다. 일단 쭉 읽어봤는데 아무것도 모르겠네요. 이렇게 모를 수가 있나. ㅋㅋㅋ

파이썬은 생활 코딩 사이트를 통해서 어느정도 독학을 했는데 잘 안쓰니까 또 까먹었네요. 저는 스팀에 연재 되는 웹툰만 따로 모으는 사이트 하나를 만들고 싶다는 생각이 문득 드는 군요!

오, 좋은 아이디어라고 생각합니다. 알려진 웹툰 태그를 모아서 보여주는 사이트...!!

아닛 마아냐님이 언급해주시다니 무한히 감사ㅠㅠ 드립까지 훌륭한 염탐 변태 동지가 여기 있었군요!

야매코딩 소개편에 링크 모아뒀습니다 :) 아예 시리즈 다음 편 링크는 여기(...)로 해도 될듯 흐흐

어서오세요. 염탐 변태 동지여! 소개편을 계속 수정하고 계셨군요!

에바의 인류보완계획이 떠오르는 인류변태계획이군요.
pycharm 은 구글 클라우드에서 못돌리나요?

구글클라우드 또한 운영체제를 우분투로 사용할 뿐, 그냥 PC 하나를 갖는 것이니 일반 프로그램 깔듯이 pycharm을 설치하면 사용할 수 있습니다.

요즘은 보팅만 하고 댓글을 잘 못 적고 있는데 보팅 봇 개발중이라 ㅋㅋㅋ 마야나님의 시네마 서비스가 준비 되었습니다. ^^;;
https://steemit.com/kr-art/@talkit/kr-art-talkit-08-maanya-2-sbd

오! 구경하러 갑니다 //ㅅ/ 보팅봇이라니 엄청난 서비스를 준비 중이시군요.

요즘 파이썬을 공부하고 있습니다. 혹시 stream = map() 이 부분에서 stream의 자료형이 어떻게 되나요? for문으로 돌리는 post에 메소드가 붙는걸 보면, stream은 클래스들의 리스트인가요? 학교 다니면서 코딩을 좀 제대로 공부할걸 그랬습니다. 그저 수학이랑 물리만 좋아서 코딩이나 알고리즘 관련된 수업을 피해다녔더니 정작 필요할걸 잘 모르네요ㅠㅠ

  ·  2 years ago (edited)

b.stream(filter_by=['comment']) 는 포스트, 댓글을 리스트와 같이 순차적으로 접근할 수 있는 Iterable 객체를 생성해주는 Generator 객체입니다.

map은 함수 하나와 list, str과 같은 반복 가능한 자료형(iterable)을 파라미터로 제시하면, 반복 가능한 자료형을 매개변수로 수행된 함수의 반환 결과를 가져오는 함수입니다.

따라서 stream = map(Post, b.stream(filter_by=['comment']))b.stream(filter_by=['comment']) 로 얻은 Iterable 객체가 담고 있는 요소Post 형으로 형변환한 결과가 됩니다.

Iterator와 Generator에 대한 설명이 많이 있지만 아래의 링크가 도움을 드릴 수 있을거라 생각합니다.
http://pythonstudy.xyz/python/article/23-Iterator%EC%99%80-Generator

언제나 편하게 질문해주세용 >ㅅ<

친절한 답변 감사합니다! 조금 이해가 가는것 같습니다. 달아주신 링크 참조해서 더 알아보겠습니다