0. 프린이 여러분 함께 해요. 숙제는 해왔나요?
코딩 1도 몰라도 일단 따라하면 되는, '누구나' 하는 야매코딩 시리즈입니다.
누구나 만들어보는 스팀봇! 강좌 세번째 편에 오신 것을 환영합니다.
반가워요 프린이(프로그래밍 어린이) 여러분!
혹시 처음 오셨다면, 소개편이 있습니다. 강좌가 새로 올라오면 소개편에 링크가 업데이트 되니, 리스팀/북마크 해두면 편할겁니다 :)
지금까지 부엌(VM인스턴스)을 구글로부터 임대하고, 앞으로 편히 조리기구들(패키지)을 세팅할 수 있는 Conda를 설치해봤습니다.
이번 편은 본격적으로 스팀봇 레시피(코드예제)를 익히기 위한 개념들을 배워볼겁니다. 야매로 파이썬을 이용해 스팀 API와 소통하는 법을 배울거죠.
아직 파이썬이나, 스팀 API가 뭔지 모르겠는 프린이 분들도 일단 계속 읽어보세요 :) 이해가도록 설명해드리겠습니다!
꼭 함께 한 단계, 한 단계를 따라해야 나중에 본인이 직접 요리를 할 수 있을겁니다. 겁 먹지 말고, 시간 좀 내서 함께 해요!
A. 개발 환경설정 따라하기 I - Google Cloud 세팅
B. 개발 환경설정 따라하기 II - Conda 세팅
C. 스팀 API 설치 및 살펴보기 101 ☜
D. 스팀 API 심화, 블록체인 & 포스트
E. 예제로 따라하는 스팀봇 뚝딱
F. nohup으로 자동화, 알아서 언제나 24/7
그럼 본격적으로 시작해볼까요?
- 난이도: 中
- 소요시간: 약 30분 (스팀이랑 수다 많이 떨면 40분?)
이미지 출처 - https://dribbble.com/shots/3974885-Bumblebee by Pat Grivet
1. 요리부엌 세팅을 해봐요
이전 강의 (B. 개발 환경설정 따라하기 II - Conda 세팅)에서 조리기구 세팅의 달인 Conda를 설치했으니 활용해봐야겠죠?
저번처럼 우선 구글 클라우드 콘솔 사이트로 이동해볼까요?
이미 구글에 로그인 하셨다면, 여기 클릭을 하면 되요. URL은 https://console.cloud.google.com입니다. 북마크 추천드려요 :)
부엌(VM인스턴스)에 입장(접속)하는 방법은 기억나시나요?
방금 들어간 대시보드에 CPU(%) 빨간색 그래프가 있죠? 비록 화면에 켜두진 않았지만, 프린이의 부엌은 사실 구글의 가상공간에 띄어둔 컴퓨터이기 때문에 계속 작동중이었죠.
이번 편 마무리할 때 끄는 방법 가르쳐드릴게요 :) 참고로 부엌(VM인스턴스)에서 VM이 Virtual Machine의 약자입니다. 말 그대로 '가상 컴퓨터'라는 뜻이죠.
자 그럼 이제 리소스의 Compute Engine을 클릭하고, SSH 버튼을 눌러서 부엌에 접속해봅시다!
저번에 Conda가 잘 설치됐는지 숙제검사(!!) 확인부터 해볼까요?
conda --version
이라고 입력해주면(당연히 엔터 쳐주시고), 제대로 설치됐는지 확인할 수 있습니다.
같은 결과가 나왔나요? 축하드립니다!
보다시피 이번 명령어는 설치한 Conda의 버전을 띄워라!입니다. 만약 제대로 설치가 되지 않았다면 저런 결과가 나오진 않았겠죠?
세팅 타임! 이제 Conda의 기능을 사용해볼 차례입니다.
요리할 때마다 요리에 따라 필요한 조리기구가 매번 다르니, 그에 맞게 세팅해주는 도구가 Conda라고 소개해드렸죠?
된장찌개 할 때 꺼내둔 조리기구 세트, 에크타르트 만들 때 꺼내둔 조리기구 세트, 여기에 호칭을 부여하면 더 관리하기 편하겠네요.
프린이 여러분은 스팀봇을 요리할테니 필요한 조리기구 세트 이름을 'steembot'이라고 짓자고 Conda에게 알려줘볼까요?
conda create --name steembot python=3.6
이번 명령어가 궁금하다면, 영어 그대로입니다.
conda(콘다짱) create(새로운 세트 만들어줘) --name(이름은) steembot(스팀봇이라고 할게). 다만 뒤에 python=3.6은 스팀봇 조리기구 세트에 꼭 3.6버전의 파이썬을 추가해달라는 요청입니다.
Conda가 기본적인 조리기구 세팅 준비를 하는동안 잠시 기다려주고,
본인을 업그레이드 해달라는 요청도 하지만 가뿐히 무시합니다. 그냥 계속 기다려주세요.
마지막에 설치될 패키지(packages)가 있다면서 진행허가를 묻네요?
y
를 입력후 엔터를 눌러주세요.
부엌에 '스팀봇'을 위한 기본 조리기구(패키지) 세팅을 할테니 뭐뭐가 있다고 목록을 보여준겁니다. 잘 살펴보면 중간쯤에 python도 보이네요 :)
설치가 끝나면 아래와 같은 화면이 보입니다.
방금 설치한 스팀봇 세팅(environment)을 사용(activate)하려면 source activate steembot
을 입력하라고 Conda가 안내해줬네요?
입력하면 (엔터) 변화가 보일겁니다.
명령을 받는 줄 맨 앞에 (steembot)이라고 붙어있죠?
Conda가 우리가 steembot이라고 명칭을 붙인 조리기구 세팅을 불러온겁니다!
반대로
source deactivate
을 입력하면 앞에 붙은게 사라집니다. 세팅을 치우는거죠. 하지만 지금은 우선 스팀봇이라는 명칭의 세팅이 필요하니 만약 치웠다면 다시 불러와주세요 :)
2. 스팀, 우린 대화가 필요해.
프린이게는 부엌(VM인스턴스)이 있고, 조리기구 세팅(Conda)가 준비됐지만, 여전히 '스팀봇'이라는 요리를 만들줄 모릅니다.
딱 어딘가에 '스팀에는 유저 100명이 있고, 스달은 지금 $10 가치를 지녀'라고 써있으면 좋겠지만, 현실은 계속 수치가 바뀌잖아요?
그래서 자동으로 스팀잇에 올라오는 글, 댓글들을 읽고 알아서 댓글과 업보트를 달아주는 스팀봇을 만들려면 프린이는 스팀과 대화를 해야 합니다.
그럼 어떻게 대화를 나누죠?
다행히 API라는 개념이 있습니다. 쉽게 말하자면 스팀이 본인의 카톡ID를 공개해둔겁니다. 누구나 대화를 걸 수 있게요.
다만 아쉽게도 저쪽은 카톡이 없는 세계라 스팀에게 직접 통화할 수 있는 전용 전화기(스팀API 패키지)를 부엌에 준비해둬야합니다.
다시 말하자면, 스팀봇 요리하는게 아니라면 스팀 직통 전화기는 딱히 부엌에 필요 없겠죠? 그래서 그땐 Conda에서 steembot 세팅을 치우고 다른 세팅을 만들게 됩니다.
다양한 방법으로 직통 전화기(스팀 API 패키지)를 부엌으로 주문받을 수 있지만, 프린이 여러분은 함께 아래 명령어로 똑같이 주문했으면 해요. 다단계 아닙니다! 믿어주세요!
conda install -c conda-forge steem
그럼 아까보다 더 긴 설치 목록이 준비됩니다.
언제나처럼 y
를 입력해주세요.
자 기다렸다가 설치가 완료되면 python3
를 입력해주세요.
하자 없는 직통 전화기(스팀 API 패키지)가 부엌에 도착(설치)했는지 확인하는겁니다.
위와 같은 화면이 보이나요?
여태까지 리눅스 명령어를 입력하고 있었는데, 이제 드디어 프로그래밍 언어인 파이썬을 입력하는 화면입니다!
파이썬 혹은 프로그래밍 자체가 처음이라도, 겁 먹지 마세요 :) 야매로 잘 알려드릴게요
일단 딱 3줄이면 됩니다. 대소문자에 유의해주세요.
from steem import Steem
(엔터)
s = Steem()
(엔터)
s.get_account('hellocrypto')
(엔터)
그럼 제 @hellocrypto 계정의 정보를 불러옵니다.
정보가 엄청 많죠? 바로 이어서 프린이 여러분의 계정명을 입력해봐도 좋아요.
s.get_account('프린이')
(엔터)
한 번 천천히 익숙한 프린이의 정보를 읽어보세요.
아니면 간략하게 원하는 정보 부분만 읽으려면 내용중에 보면 '정보 종류': 정보' 형식들이 보이시죠? 예를 들어, 'id': 573730 혹은 'name': 'hellocrypto'처럼요.
s.get_account('프린이')['id']
(엔터)
그럼 딱 그 부분만 읽을 수 있습니다. 훨씬 보기 쉽네요. @hellocrypto는 573730번째 가입자라는 뜻이죠.
좀 더 자세히 스팀과 대화를 나누는 방법을 배워봐요.
3. 스팀, 너에 대해 알고 싶어.
파이썬이라는 언어 전체를 알려드릴 수는 없지만, 지금 필요한 것들은 찍어줄 수 있죠.
프로그래밍 언어잖아요. 해외여행 가서 필수 표현만 알면 살아남을 수 있는거랑 마찬가지입니다. 다만 컴퓨터는 바보입니다. 하나부터 열까지 정확히 명령을 내려야만 하죠. 일단 방금 입력한 것부터 알아볼까요?
from steem import Steem
조금 전에 스팀이랑 대화할 수 있는 직통 전화기, 스팀API를 설치했죠?
윗 줄은 바로 그 직통 전화기를 손에 든겁니다.
s = Steem()
전화기를 손에 들었지만, 컴퓨터는 어느 손에 들었는지 알려주지 않으면 프린이가 다시 '그때 그 손! 이 바보야!'라고 말 할 수가 없습니다(...)
그리고 컴퓨터의 손은 프린이처럼 2개가 아니라, 매우 많죠.
그래서 컴퓨터에게 기억을 시켜줍니다. s 손에 방금 Steem() 전화기를 들고 있는거야. 라고.
s.get_account('hellocrypto')
그리고 이제 컴퓨터에게 대리로 스팀API랑 통화를 시켜야 합니다.
그런데 허공에 말해버리면 의미가 없겠죠?
그래서 방금 전화기를 든 s손에다가 get_account 계정 정보를 알려줘! ('hellocrypto') 계정은 hellocrypto야. 라고 지시를 내려줍니다.
때문에 s랑 get_account('hellocrypto') 사이에 . 점이 보이죠?
마지막으로 한 번 엉터리 요청을 스팀에게 보내볼까요?
s.get_account('hellocryptsdsdso')['name']
hellocryptoㄴ머리ㅏㄷㅈㄹ 유저 정보를 알려줘, 같은거죠.
그럼 스팀은 '뭐야... 무서워...' 하면서 Error(에러)만 돌아옵니다.
만약 스팀에게 질문 3가지를 연달아 물었는데, 2번째가 이상하면 중간에 덜컥 이렇게 멈춰버립니다. 그럼 3번째 질문은 아예 묻지도 못합니다. 이런 일이 있으면 안 되겠죠?
이를 방지하는 방법은 다음 편에서 알려드리겠습니다 :)
4. 스팀, 너는 무슨 주제를 좋아해? & 마무리
스팀이랑 대화할 수 있는 주제는 한정되어 있습니다. 당연한거죠.
오늘은 get_account 라는 대화 주제를 배웠지만, 다행히 그 보다 다양한 대화를 나눌 수 있습니다. 그럼 어떤 대화 주제들이 있는지 어떻게 알 수 있을까요?
다행히 '그녀를 사로잡는 대화법' 스팀API Docs가 있습니다. 잘 이해가 가지 않더라도 한 번 훑어보시면 다음 편을 학습하는데 도움이 될겁니다 :)
이거슨 훌륭한 미연시 공략법인거시에여!!...죄송합니다.
드디어 뭔가 스팀봇 만들기에 한 번 다가선 것 같지 않나요? 아니라고요? 시무룩
오늘의 스팀API 맛보기 꼭 한 번 따라해보세요!
이제 내일 다음 편(D. 스팀 API 심화, 블록체인 & 포스트)으로 찾아뵙겠습니다. 언제나 그렇듯 좋은 야매를 대령해드리겠습니다.
궁금하신 점, 지적하실 점(환영합니다) 혹은 문제가 발생했다! 싶으면 댓글 언제든 남겨주세요. 빠른 답변은 아니겠지만(...) 대답드리겠습니다 :)
아차, 그동안 부엌(VM인스턴스)를 꺼두고 싶다면, 검은 화면은 그냥 닫으시고 SSH 버튼 옆에 클릭하여 중지 버튼을 눌러주세요 :)
이만 일병 크립토였습니다. 필승!
바로 다음 편으로 가즈아!
D. 스팀 API 심화, 블록체인 & 포스트
지금까지 댓글에 언급된 문제들 정리해드립니다 :)
공략법docs 내용 중 일부는 이상한 결과가 나와요! -> 아쉽게도 문서 업데이트가 잘 안 이뤄지고 있어요. 일부는 없어진 기능일 수도 있습니다. 혹은 s.get_account('hellocrypto') 처럼 단지 ID만 넣는게 아니라 다른 값을 요구하는 기능들도 있으니 확인해주세요 :)Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
댓글을 먼저 달걸...
암튼~ 여기까지 완료했습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
겟티커는 저도 아직 안 해봐서 확실하진 않지만 docs가 업뎃이 느려서 없어진 부분일 수도 있습니다 하핳;
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
매일 이시간만을 기다립니다^^ 업보트!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
하핳 감사합니다! 분발할게요!!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
조용한데서 다시 읽어봐야 겠어요
즐거운 하루되세요🍀
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
감사합니다. 노이지스카이님도 좋은 하루 되세요!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
예에!!우와!! 기다리던 3편이 나왔군요!!! 오늘도 추가로 진도를 열심히 따라가봐야겠습니다. 근데 저는 맨 처음에 카드정보 입력안하면 넘어가지지가 않아서 구글에 1달러 결제하고 시작했네요 ㅠㅠ
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
아 본문 수정하는거 잊고 있었네요... 네 구글이 본인인증 단계로 1불 결제했다가 나중에 취소합니다! 실제로 지출되는건 없을겁니다ㅎㅎ
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
우와 우와 뭔지 모라서 시간 두고 살펴봐야 할것 같아요
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
감사합니다ㅎㅎ 시간 날 때 천천히 한 번 읽어주세요 :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
시간내서 공부해야 하는데 시간이 안나네요 ㅠㅠ
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
완결되면 한 번에 몰아서 해보시는 것도 괜찮을듯 싶어요ㅎㅎ 읽어주셔서 감사합니다!!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
네 지금 바쁜일 끝나면 저도 차근 차근 열심히 공부해 보겠습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
1등으로 댓글! 오늘도 좋은글 감사합니다!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
아...anaconda3 설치 끝나고 conda 명령어로 테스트 하는데 안먹힙니다... 이유가 뭘까요 ㅠㅠ
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
혹시 검은화면을 껐다가 다시 SSH 접속을 하셨나요? 설치 후 꼭 나갔다 와야 합니다 :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
네 그건 했는데도 안되네요... 하참 ㅠㅠ 원인불명의 문제때문에 고민입니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
흐으음 설치 과정은 똑같이 진행하신거 맞죠?ㅠㅠ 한 번 VM인스턴스 중지 버튼 눌러서 껐다가 다시 시작 버튼을 눌러보시겠어요?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
오오 잘됩니다! 진리의 헬선생님!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
흐아 다행이다!!!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
멋지네요. 친절한 설명 좋아요.^^
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
감사합니다 헤헤 열심히 마저 달릴게요!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
그렇게 간단하게 보이지 않네요. ㅠㅠ
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
아무래도 봇을 만드는거라 쉽다고만은 못할것 같네요 :) 하지만 1편부터 따라오면 만들 수 있게 연재하고 있습니다. 차근차근 따라와주세요!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
오오!! 연재가 끝나면 a to z 를 하려고 대기중입니다!! 충성!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
좋습니다!! 필승!ㅎㅎ
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
!!! 힘찬 하루 보내요!
https://steemit.com/kr/@mmcartoon-kr/5r5d5c
어마어마합니다!! 상금이 2억원!!!!!!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
This post received a 44% upvote from @krwhale thanks to @hellocrypto! For more information, click here!
이 글은 @hellocrypto님의 소중한 스팀/스팀달러를 지원 받아 44% 보팅 후 작성한 글입니다. 이 글에 대한 자세한 정보를 원하시면, click here!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit