Telegram Bot2017. 6. 26. 22:54

이전 포스팅에서 python으로 Bittrex wrapper 라이브러리를 이용해 Bittrex API를 사용했다.

이번 포스팅은 이를 이용하여 telegram 봇으로 특정 코인의 가격을 알려주는 기능을 만들어 보자.


우선 telegram bot과 관련된 내용은 이전 포스팅을 참고하길 바라며, 이번 포스팅에서는 다루지 않는다.


[그림 1] Bittrex API 문서


Bittrex API 문서를 내려보면 [그림 1] 부분을 확인할 수 있다.

①을 보면 Request 예제가 있다. 주소창에 ①을 넣으면 결과로 ②를 확인할 수 있다.

②에서 여러 정보들 중 현재 시장가격을 확인할 수 있다.

이 Request 예제를 활용할 수 있는 함수가 있는지 python wrapper 코드를 찾아보자.

[그림 2] bittrex.py Bittrex 클래스 함수 get_market_summaries()


코드를 확인해 본 결과 [그림 1]의 ① 을 이용하는 함수는 정의되어 있지 않고 get_market_summaries() 함수만 정의되어 있다. 이 함수의 기능을 읽어보면 마켓 전체의 정보를 가져온다.

이 함수를 이용해 원하는 코인의 정보를 얻을 수 있지만, 전체 정보에서 찾아내는 것보다 [그림 1]의 Request 를 이용하는 것이 더 좋아 보인다.

* for문을 돌려 찾아내는 것보다 한번의 요청으로 원하는 데이터를 얻어오는 게 더 빠를 것 같다.


이를 인지한 상태에서 [그림 1]의 결과를 다시 보면 다음과 같다.

[그림 3] [그림 1]의 결과로 얻는 정보


[그림 3]에서 확인할 수 있는 정보들 중에 Last 부분이 현재 시장가이다. 하지만 단위가 BTC 단위이기 때문에 가격을 인지하는 것이 쉽지가 않다. 따라서 달러로 변환시켜 달러가격으로 표시하도록 하자.


[그림 4] BTC의 달러 가격 확인


Bittrex에서는 BTC, ETH, USDT를 기준으로 가격을 각각 표시를 하며, 각 기준으로 거래할 수 있는 코인의 종류가 모두 다르다.

BTC는 USDT로 거래할 수 있는 코인이기 때문에 달러 가격을 확인할 수 있다.

[그림 4]의 Last 부분이 바로 현재 BTC의 달러 가격이다.


지금까지 확인한 정보들을 가지고 만든 코드는 다음과 같다.


bittrex_telbot.py


위 코드는 bittrex wrapper 라이브러리를 참고하여 작성했으며, 이 코드의 기능은 60초마다 BTC 코인( 비트코인 )과 EDG( 엣지리스 ) 코인의 가격을 텔레그램 봇으로 보내준다.


지금까지 특정 코인의 가격을 받아보는 텔레그램 봇을 만들어봤다.

Bittrex API와 python wrapper 라이브러리를 참고하면 더 많은 기능을 추가할 수 있다.

Posted by Imp3rio
Telegram Bot2017. 6. 26. 15:17

Bittrex API문서는 여기에서 확인할 수 있다.

API 문서는 자주 봐야 하기 때문에 봇이 완성될 때까지는 닫지 않도록 한다.


[그림 1] Bittrex API 페이지


Bittrex API 페이지는 [그림 1]과 같다. 

API 이용자들이 쉽게 사용할 수 있도록 GO, Ruby, node.js, python 언어의 wrapper 라이브러리를 제공하고 있다.

필자는 python을 이용하기 위해 python 라이브러리 링크를 타고 들어가보자.

* 필자는 python 2.7.10 버전을 사용하고 있다. 

[그림 2] Github python-bittrex 페이지


[그림 2]와 같이 Github 사이트가 열린다.

해당 라이브러리를 사용하기 위해 clone or download 버튼을 눌러 ZIP 형식으로 다운로드 받는다.

다운받은 python-bittrex.zip 파일을 압축 해제한 뒤 python을 이용해 설치한다.

이를 위해  커맨드 혹은 터미널을 열어 압축 해제한 폴더에 이동한 뒤 아래 명령어를 이용한다.

python setup.py install


위 명령어를 커맨드 창에 입력하면 설치가 완료된다.


bittrex wrapper 라이브러리를 사용할 환경을 모두 설정했다.

이제 실제로 동작하도록 python 코드를 짜면 된다.

python 코드를 작성할 때 [그림 1] 과 [그림 2] 사이트를 모두 봐야 한다.


우선 간단하게 'BTC-EDG' 마켓에 대한 정보를 가져오는 코드이다.


위 코드는 get_markets() 함수가 JSON 형식으로 데이터를 반환해 주면 그 값을 이용해 BTC-EDG 관련된 부분만 출력하도록 되어 있는 코드이다.

API_KEY와 SECRET_KEY는 Bittrex에서 발급받은 키를 넣어주면 된다.


API 문서 및 Github 코드를 바탕으로 필요한 코딩을 하면 된다.


지금까지 Bittrex wrapper 라이브러리를 이용한 간단한 마켓 정보를 출력해 봤다.

다음 포스팅은 Bittrex 시세 정보를 telegram 봇으로 알림 받는 것에 대한 내용이다.

Posted by Imp3rio
Telegram Bot2017. 6. 26. 13:48

Bittrex API를 이용하기 위해서는 API Key, Secret Key를 발급받아야 한다.

이를 위해서 로그인을 한다.

* 회원가입은 여기를 참고해 진행하길 바란다.



[그림 1] Setting 화면


로그인을 한 뒤 [그림 1]의 ① 을 클릭하여 Setting 화면에 들어와 ②를 클릭해 2중 인증 등록하는 페이지로 이동한다.

* API Key를 발급받을 때 2중 인증이 반드시 필요하다.


[그림 2] 2중 인증 페이지


2중 인증 페이지는 [그림 2]와 같다. ①에 QR 코드가 있는데 이를 이용해 6 자리 암호( OTP ) 를 얻어와야 한다. Bittrex는 google authenticator를 이용한다고 중앙상단에 설명이 되어있다. google authenticator는 스마트폰 어플로 다운받아야 한다. 이 어플을 이용해 QR Code를 찍으면 OTP 암호가 나타난다.

이 암호를 중앙 하단에 있는 입력 창에 넣고 Enable 2FA 버튼을 누르면 2중인증 설정이 진행된다.

[그림 3] 2중 인증 진행 1


이메일로 인증하라고 한다. 메일을 보면 Bittrex에서 온 메일이 하나 존재한다. 해당 메일을 열어 Verify 관련 링크를 누르면 다음과 같은 화면을 볼 수 있다.

[그림 4] 2중 인증 진행 2


[그림 4] 와 같은 화면이 나타나면 google authenticator 어플을 이용해 6자리 숫자를 입력해 주면 다음과 같은 화면이 나타난다.

[그림 5] 2중 인증 완료


[그림 5]와 같은 화면이 나타나면 2중 인증이 모두 완료된다.


[그림 6] Setting 페이지


다시 Setting 페이지로 넘어와서 ①을 눌러 API Key 발급받는 페이지로 이동한다.

②를 눌러 API Key를 생성한다.

[그림 7] Add API Key


API Key 추가버튼을 누르면 [그림 7]과 같이 나타난다. 4가지 기능중 어떤 것들을 사용할지 토글 형식의 버튼을 이용해 설정한다. 필자는 모든 기능을 사용하도록 설정했다.

설정을 하고 ① 입력창에 google authenticator에 나타난 OTP를 입력하고 update kyes 버튼을 누르면 API Key가 발급된다.

[그림 8] API Key & Secret Key


[그림 8]에 나타난 Key와 Secret 값을 잘 적어두도록 하자.

지금까지는 Bittrex API를 이용할 수 있는 API Key를 발급받았다. 여기까지 따라오느라 고생이 많았다.

다음 포스팅은 python을 이용해 Bitrex API를 사용하는 법을 알아보도록 하자.

Posted by Imp3rio
Telegram Bot2017. 6. 25. 18:28

지금까지 Telegram Bot을 만들고 Twitter API 설정 및 tweepy 설치까지 했다.

이번에는 python 코드를 작성하여 Tweet_Bot이 동작하도록 하자.


tweet_Test.py 라는 이름으로 파일을 생성했고, python 코드는 다음과 같다.



위 코드를 설명하겠다.

웹에 접근하기 위해 urllib, urllib2 라이브러리를 사용하며, 디렉터리와 파일의 유무 및 생성을 위해 os 라이브러리를 사용한다. 그리고 twitter API를 쉽게 사용하기 위해 wrapper 모듈인 tweepy 라이브러리를 사용한다. 마지막으로 60초마다 동작하도록 하기 위해 time 라이브러리를 사용한다.


API키, API Secret 키, Access 키, Access Secret 키 들을 선언한다.

send_telegram() 함수를 정의하며 이 함수는 BOT_ID( 봇 고유 번호 )를 이용해 해당 봇에 CHAT_ID( 채팅방 고유번호 )를 가진 채팅방에 인자로 전달받은 sendData를 보내는 함수이다.

즉, Tweet_Bot이 사용자에게 데이터를 보내주는 역할을 한다.


main 함수부분은 다음과 같다.

먼저 현재 디렉터리에 "latest" 라는 이름의 디렉터리가 있는지 판별하고, 없으면 "latest" 디렉터리를 생성한다.

API_KEY, API_SECRET 을 이용해 사용자 검증을 하고, ACCESS_KEY, ACCESS_SECRET 을 이용해 검증된 사용자에게 access_token을 셋팅한다.

UserID는 숫자로 되어 있는데 이 숫자는 여기에서 확인할 수 있다. '@'로 시작하는 사용자 명을 '@'를 떼고 적어주면 된다. 

필자는 @CoinKor 계정의 트윗을 받아오기 위해 CoinKor를 검색하여 나온 ID를 사용하였다.


name은 파일을 생성할 때 사용하는 변수로 필자는 CoinKorea의 데이터를 가져오므로 CoinKorea로 설정했다. 


무한 루프를 돌면서 특정 사용자의 타임라인을 읽어와 timeline 변수에 저장한다.

타임라인의 가장 최신의 글을 text 변수에 저장한 뒤 latest 디렉터리 안에 "CoinKorea_latest.txt" 파일이 있는지 판단하고 없으면 isNotEqual 변수를 True로 설정해 파일을 생성하여 최신글을 저장한다.

"CoinKorea_latest.txt" 파일이 존재하면 파일을 읽어 before 변수에 저장하고 text 변수와 비교하여 다르면 isNotEqual을 True로 설정한다.

즉, 가장 최신의 글이 올라오게 되면 해당 글을 텔레그램으로 보내주는 역할을 한다.


위 루틴을 60초 마다 반복하도록 sleep() 함수를 이용한다.


[ 그림 1 ] tweet_Test.py를 실행한 후 Tweet_Bot 채팅방


이렇게 Tweet_Bot을 만들어봤다.

위 봇을 응용해서 다른 봇도 만들어볼 수 있을 것 같다.

Posted by Imp3rio
Telegram Bot2017. 6. 25. 17:33

이전 포스팅에서는 telegram 봇을 생성하는 것을 다뤘다.

이번 포스팅은 이전에 만든 telegram 봇을 이용해 Twitter 게시물을 가져오도록 해보자.


필자는 python을 이용해 봇이 동작하도록 하고자 한다.

python은 2.7.10 버전을 사용하고 있으며, 2.7 버전 아무거나 사용해도 무방하다.

단, python 3버전은 코딩 방식이 다르므로 동작하지 않을 수 있다.


우선 tweepy 라이브러리를 이용하기 위해 tweepy를 설치해야 한다.

tweepy는 여기에서 설치가 가능하다.

* tweepy 라이브러리는 twitter에서 제공해주는 API를 쉽게 사용할 수 있도록 만든 wrapper 라이브러리다.


설치방법은 다음과 같다.

[ 그림 1 ] tweepy github 페이지 화면


[ 그림 1 ] 에서 Clone or download 버튼을 클릭해 zip으로 다운로드 받고 압축을 풀어준다.

터미널 혹은 커맨드창을 열어 압축이 풀린 tweepy 폴더로 이동한다.

python setup.py install


위 명령을 이용해 설치를 한다.

설치가 완료 되면 tweepy 라이브러리를 사용할 수 있다.


twitter API를 사용하기 위해서는 twitter 사이트에서 키를 받아와야 한다.(LINK)

LINK를 타고 들어가 로그인을 한다.

[ 그림 2 ] twitter app 등록 사이트


로그인을 하면 [ 그림 2 ]와 같은 화면을 볼 수 있다.

우상단에 [Create New App] 버튼을 클릭한다.

[ 그림 3 ] Create App 화면


[ 그림 3 ] 과 같은 화면을 볼 수 있는데, 순서대로 App 이름, App 설명, URL 이 필수로 되어 있다.

App 이름은 T3st_Tweet_Bot, App 설명은 crawl tweet and send telegram, URL은 127.0.0.1을 입력한 뒤 Developer Agrement를 체크하고 Create 버튼을 누른다.

* App 이름은 이미 사용중이라 위와 같이 설정했다.


[ 그림 4 ] App 설정 화면


App이 정상적으로 만들어지면 [ 그림 4 ] 와 같은 화면을 볼 수 있다.

Keys and Access Tokens 탭에 들어가면 다음과 같은 화면을 볼 수 있다.

[ 그림 5 ] Keys and Access Tokens


API Key, API Secret 키를 따로 적어두고 아래 Your Access Token 부분에 Create Access Token 버튼을 클릭해 Access Token을 발급받는다.

[ 그림 6 ] Access Token 발급


Access Token, Access Token Secret 값도 따로 적어놓는다.


이로써 Twitter API를 사용할 준비가 끝났다.

다음 포스팅은 실제 Python 코드를 작성하여 Tweet_Bot이 작동되도록 한다.

Posted by Imp3rio
Telegram Bot2017. 6. 25. 16:52

이번에 다룰 내용은 Telegram을 이용한 Bot 만들기이다.

필자는 python을 이용해 트위터의 특정 계정의 최신 트윗 내용을 보내주는 봇을 만든다.


Telegram에서는 이용자들이 쉽게 Bot을 만들어 사용할 수 있도록 API를 제공하고 있다.

봇과 관련된 API 문서는 여기에서 볼 수 있다.


우선, 텔레그램 봇을 이용하기 위해서는 텔레그램에 BotFather를 추가해야 한다.

BotFather는 텔레그램 봇을 관리하는 관리자같은 거라고 생각하면 이해하기 쉽다.


텔레그램 친구목록에서 @BotFather를 검색해 친구추가한다.

[ 그림 1 ] 텔레그램 친구 목록에서 @BotFather를 검색한 화면

[ 그림 2 ] BotFather 를 클릭하면 나타나는 화면


[ 그림 2 ] 에서 Start를 눌러 활성화 한다.

[ 그림 3 ] BotFather 활성화한 화면


BotFather를 활성화하면 어떤 명령어들을 사용할 수 있는지 보여준다.

봇을 만들어야 하기 때문에 /newbot 명령어를 이용한다.

[ 그림 4 ] /newbot 명령어 입력시 화면


봇의 이름을 정하라고 한다.

필자는 Tweet_Bot 으로 봇 이름을 설정한다.

[ 그림 5 ] 봇 이름 설정


봇의 username을 설정하라고 한다. username은 반드시 'bot'으로 끝나야 한다고 한다.

Tweet_Test_Bot으로 한다.

* Tweet_Bot으로 설정하려고 했지만 이미 사용중이라 하기 때문에 다른 이름을 사용했다.


[ 그림 6 ] 봇의 username을 설정한 화면


봇의 username을 설정하면 [ 그림 6 ] 과같은 화면을 볼 수 있다.

API 값을 따로 적어두도록 하자.

그 다음 Tweet_Test_Bot 링크가 걸려있는데 이 링크를 클릭해 방금 만든 봇을 활성화 하자.

[ 그림 7 ] Tweet_Bot 활성화


Tweet_Bot을 활성화 한 화면이다.

아직 봇만 활성화 시켰기 때문에 아무 동작도 하지 않는다.

봇이 동작하도록 하기 위해서는 Bot의 Chat-id 를 알아야 한다.

Chat-id를 알아내기 위해 다음 URL을 참고해서 들어가자.

https://api.telegram.org/bot[API값]/getUpdates


BotFather한테 받은 API 값을 [API값] 부분에 넣어주면 된다.

* 대괄호는 넣지 않도록 한다.


[ 그림 8 ] Tweet_Bot의 getUpdates 화면


[ 그림 8 ] 과 같이 ok 부분이 true로 되어 있어야 한다. 만약 false로 나타나면 API 값이 틀렸을 확률이 높다.

chat-id가 나타나지 않는다. 이는 Tweet_Bot 채팅방에 아무 입력이 없었기 때문이다.

Tweet_Bot 채팅방에 아무 말이나 입력하자.


[ 그림 9 ] Tweet_Bot 채팅방에 '헤헤헤헷'을 입력한 후의 getUpdates 화면


Tweet_Bot 채팅방에 아무 말이나 입력한 뒤 getUpdates 화면을 새로고침하면 [ 그림 9 ] 와 같은 화면을 볼 수 있다. 여기서 id 값을 따로 적어놓도록 하자.


지금까지 Telegram 봇 만들기를 했다.

다음에는 twitter API 설정 및 tweepy를 설치하도록 하자.

Posted by Imp3rio