슬랙 알림봇 세팅 : 매시간마다 비트코인 가격 알림
나를 대신해서 시장을 모니터링하고 있다면 비트코인 투자에서도 자신감이 생깁니다. 이 프소팅에서는 파이썬 파이낸스 API로 시장상황을 모니터링 하면서, 매 시간 현재가가 어느 위치에 있는지를 주기적으로 알려주는 슬랙 알림봇을 만들어 보겠습니다.
글의 순서
슬랙 알림봇, slack_sdk 패키지
비트코인 가격 알림봇의 기본 구조 : 무한 반복문
슬랙 알림봇 : 비트코인 가격
슬랙 알림봇 ; 비트코인 실시간 가격 메신저
슬랙 알림봇, slack_sdk 패키지
슬랙 알림봇을 가장 간단하게 만들 수 있는 방법은 slack_sdk 패키지를 이용한 방법입니다. 지난 포스팅 슬랙 알림봇, slack_sdk를 이용한 파이썬 코드에서 단 몇 줄의 코딩으로 슬랙 채널에 메시지가 전송되는 것을 보았습니다. 슬랙 알림봇은 아래의 ‘함께 참고하면 좋은 글’에 링크해 두었습니다.
파이썬 프로그래밍을 통해 미리 만들어둔 메시지를 자동으로 보내는 연습을 해보겠습니다. 파이선 바이낸스 API로 받은 비트코인 가격을 매 시간 알려주게 하는 파이썬 코드를 확인해 보시기 바랍니다.
비트코인 가격 알림봇의 기본 구조 : 무한 반복문
비트코인 가격을 계속 지켜보고 있다가 특정 조건이 되면 알림을 보내는 슬랙봇 구현하기 위해서 무한 반복문을 활용합니다. 파이썬 무한 반복문의 기본은 while True:이며, 기본적으로 예외처리까지 해주는 것이 좋습니다.
지난 포스팅 디스코드 알림 봇 파이썬 코드에서 무한반복문의 기본구조와 예외 처리를 정리한 바 있습니다. 실습코드01에서 다시 한 번 복습해보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import time import datetime from datetime import datetime, timezone, timedelta while True: try: current_time = datetime.now() msg = f"현재 시간: {current_time.strftime('%Y-%m-%d %H:%M:%S')}" print(msg) time.sleep(3) except Exception as e: print('Exception occured :', str(e)) |
매시간을 출력하는 무한반복문
매 시간 현재가가 어느 위치에 있는지를 주기적으로 알려주는 파이썬 코드를 작성하기 위한 다음 단계를 진행해보겠습니다. 실습코드02는 매시간 2분마다 그 시각을 출력하는 코드입니다. 이 코드는 매시간 30분, 매 2시간 등으로 확장할 수 있습니다.
먼저 시간을 체크할 수 있도록 time_to_notify()를 만들었습니다. 이 함수는 현재시간이 2분단위의 반복되는 시간인지를 확인하는 역할을 합니다. 다른 말로는 현재 시간이 2의 배수인 분(minute)인지를 확인합니다. 현재 시간이 매 2분에 해당하는지를 확인하기 위하여 파이썬 datetime 패키지에서 datetime.now().minute 값을 가져온 후, 2로 나눠서 나머지 0을 돌려줍니다.
만약 매 4시간마다 값을 돌려주고 싶으면 datetime.now().minute의 minute 대신 hour를 쓰면 됩니다. datetime.now().hour로 가져온 값을 4로 나눠서 나머지 0을 돌려주는 식으로 말입니다.
실습코드02를 실행시킨 결과에서 16분, 18분처럼 2의 배수에 해당하는 분(minute)이 되었을 때 시간을 출력하고 있다는 것을 알 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import time import datetime from datetime import datetime, timezone, timedelta def time_to_notify(): """현재 시간이 2분마다 반복되는 시간(00분, 02분, 04분, ...)인지 확인""" current_minute = datetime.now().minute return current_minute % 2 == 0 while True: time.sleep(20) # 매 20초 대기 try: # 현재 시간이 알림 시간인지 확인 후 참일때 아래 명령어 수행. if time_to_notify(): current_time = datetime.now() msg = f"현재 시간: {current_time.strftime('%Y-%m-%d %H:%M:%S')}" print(msg) except Exception as e: print('Exception occured :', str(e)) |
1 2 3 4 5 |
현재 시간: 2024-04-06 12:16:12 현재 시간: 2024-04-06 12:16:32 현재 시간: 2024-04-06 12:16:52 현재 시간: 2024-04-06 12:18:12 현재 시간: 2024-04-06 12:18:32 |
매시간 비트코인 가격 출력하는 무한반복문
실습코드03 에는 실습코드02에 비트코인 가격을 가져오는 구문을 추가했습니다. 주석문과 print문을 유심히 봐주시기 바랍니다. 매 2분 단위에서 20초씩 대기한 후 비트코인 가격을 출력하고 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
import time import datetime from datetime import datetime, timezone, timedelta import os import pandas as pd import numpy as np from binance.client import Client import slack_sdk # 01-1) 파이썬-바이낸스 API key, API Secret 가져오기 api_key = os.getenv('Binan_API_KEY') api_secret = os.getenv('Binan_SECRET_KEY') # 01-2) 바이낸스 계정 접속 client = Client(api_key, api_secret) print('-- Account accessed --') # 02) 현재시간이 원하는 시간대인지 확인하는 함수 def time_to_notify(): """현재 시간이 2분마다 반복되는 시간(00분, 02분, 04분, ...)인지 확인""" current_minute = datetime.now().minute return current_minute % 2 == 0 # 03) 비트코인 가격 모니터링 : 무한반복문 while True: time.sleep(20) # 매 20초 대기 try: # 03-1) 현재 시간이 알림 시간인지 확인 후 참일때 아래 명령어 수행. if time_to_notify(): current_time = datetime.now() # 03-2) 파이썬 바이낸스 API로 비트코인 가격 가져오기 btc_price = client.get_symbol_ticker(symbol="BTCUSDT") btc_price_only = btc_price["price"] print(btc_price_only) text_now = current_time.strftime('%Y-%m-%d %H:%M:%S') msg = f'[{text_now}] BTC(USDT) = {float(btc_price_only):6.0f}' print(msg) except Exception as e: print('Exception occured :', str(e)) |
1 2 3 4 5 6 7 |
-- Account accessed -- 68063.13000000 [2024-04-06 16:08:11] BTC(USDT) = 68063 68056.67000000 [2024-04-06 16:08:31] BTC(USDT) = 68057 68051.95000000 [2024-04-06 16:08:52] BTC(USDT) = 68052 |
슬랙 알림봇 : 매 2분마다 비트코인 가격 알림
실습코드04에는 실습코드03에 비트코인 가격을 슬랙 알림 메시지로 보내는 구문을 추가했습니다. 실행화면은 실습코드03 결과와 똑같은데, 슬랙 알림봇이 아래와 같이 휴대폰에 주석문과 print문을 유심히 봐주시기 바랍니다. 매 2분 단위(여기서는 16시22분)에서 20초씩 대기한 후 비트코인 가격을 출력하고 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
import time import datetime from datetime import datetime, timezone, timedelta import os import pandas as pd import numpy as np from binance.client import Client import slack_sdk # 01-1) 파이썬-바이낸스 API key, API Secret 가져오기 api_key = os.getenv('Binan_API_KEY') api_secret = os.getenv('Binan_SECRET_KEY') # 01-2) 바이낸스 계정 접속 client = Client(api_key, api_secret) print('-- Account accessed --') # 01-3) 슬랙 앱 토큰 가져오기 slack_token = os.getenv('slack_OAuth_Token') agent = slack_sdk.WebClient(token = slack_token) # 01-4) 슬랙 메시지 보내는 함수 def send_slack_message(text): channel = "#코인시장-모니터링" agent.chat_postMessage(channel = channel, text=text) # 02) 현재시간이 원하는 시간대인지 확인하는 함수 def time_to_notify(): """현재 시간이 2분마다 반복되는 시간(00분, 02분, 04분, ...)인지 확인""" current_minute = datetime.now().minute return current_minute % 2 == 0 # 03) 비트코인 가격 모니터링 : 무한반복문 while True: time.sleep(20) # 매 20초 대기 try: # 03-1) 현재 시간이 알림 시간인지 확인 후 참일때 아래 명령어 수행. if time_to_notify(): current_time = datetime.now() # 03-2) 파이썬 바이낸스 API로 비트코인 가격 가져오기 btc_price = client.get_symbol_ticker(symbol="BTCUSDT") btc_price_only = btc_price["price"] print(btc_price_only) text_now = current_time.strftime('%Y-%m-%d %H:%M:%S') msg = f'[{text_now}] BTC(USDT) = {float(btc_price_only):6.0f}' print(msg) # 03-3) 슬랙 메시지 함수로 비트코인 가격 알림 send_slack_message(msg) except Exception as e: print('Exception occured :', str(e)) |
슬랙 알림봇 : 매시간 20분마다 비트코인 가격 알림
실제 사용을 고려해서 매시간에 한 번씩 코인 가격을 알려주는 슬랙 알림봇을 실습코드05에 나타내었습니다. 이 코드는 실습코드04에서 매 2분을 체크하는 함수를 매시간을 확인할 수 있는 함수로 교체하였고, 현재 시간이 20분대인지, time.sleep(10)의 대기시간보다 작은 시간(<10)인지를 확인할 수 있는 조건문을 추가했습니다. 그러니까 현재시간이 매시간 20분 10초 미만일 때 비트코인 현재 가격을 알려주게 됩니다. 43번째 줄을 유심히 봐주시기 바랍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
import time import datetime from datetime import datetime, timezone, timedelta import os import pandas as pd import numpy as np from binance.client import Client import slack_sdk # 01-1) 파이썬-바이낸스 API key, API Secret 가져오기 api_key = os.getenv('Binan_API_KEY') api_secret = os.getenv('Binan_SECRET_KEY') # 01-2) 바이낸스 계정 접속 client = Client(api_key, api_secret) print('-- Account accessed --') # 01-3) 슬랙 앱 토큰 가져오기 slack_token = os.getenv('slack_OAuth_Token') agent = slack_sdk.WebClient(token = slack_token) # 01-4) 슬랙 메시지 보내는 함수 def send_slack_message(text): channel = "#코인시장-모니터링" agent.chat_postMessage(channel = channel, text=text) # 02) 현재시간이 원하는 시간대인지 확인하는 함수 def time_to_notify(): """현재 시간이 1시간마다 반복되는 시간(01시, 02시, 03시, ...)인지 확인""" current_hour = datetime.now().hour return current_hour % 1 == 0 # 03) 비트코인 가격 모니터링 : 무한반복문 while True: time.sleep(10) # 매 10초 대기 try: # 03-1) 현재 시간이 알림 시간인지 확인 후 참일때 아래 명령어 수행. if time_to_notify(): current_time = datetime.now() # 03-2) 현재시간이 매시간:20분:00초에서 20분:09초라면 실행 if current_time.minute == 20 and current_time.second < 10: # 03-3) 파이썬 바이낸스 API로 비트코인 가격 가져오기 btc_price = client.get_symbol_ticker(symbol="BTCUSDT") btc_price_only = btc_price["price"] print(btc_price_only) text_now = current_time.strftime('%Y-%m-%d %H:%M:%S') msg = f'[{text_now}] BTC(USDT) = {float(btc_price_only):6.0f}' print(msg) # 03-3) 슬랙 메시지 함수로 비트코인 가격 알림 send_slack_message(msg) except Exception as e: print('Exception occured :', str(e)) |
마치며 …
이번 포스팅에서는 원하는 시간에 비트코인 실시간 가격을 슬랙 메시지로 받아볼 수 있도록 파이썬 슬랙 알림봇을 만들어보았습니다. 원하는 시간에 슬랙 알림 메시지를 받기 위한 파이썬 코드는 다음과 같이 크게 5개 부분으로 구성되어 있습니다.
(1) 바이낸스 계좌에 접속한다.
(2) 슬랙 채널에 접속한다.
(3) 원하는 시간을 세팅하기 위한 시간함수를 생성한다.
(4) 무한루프를 돌리며 원하는 시간이 되었을 때 파이썬 바이낸스 API를 이용하여 실시간 비트코인 가격을 가져온다.
(5) 슬랙 채널에 비트코인 가격 메시지를 보낸다.
함께 참고하면 더 좋은 글 :
▶ 슬랙 알림봇 (slack bot) 만들기
▶ 슬랙 알림봇, slack_sdk를 이용한 파이썬 코드
▶ 파이썬 프로그래밍 time 이해 : timestamp, UTC, KST
▶ 디스코드 알림 봇 : 비트코인 실시간 가격 메신저
▶ 파이썬 바이낸스 API로 시계열 데이터를 가져오는 파이썬 프로그래밍
참고자료
slack api, Formatting text for app surfaces