반응형
차트를 계속 띄워놓고 보는 게 은근히 피곤하다. 특정 가격에 오면 알림만 오면 되는데, 거래소 앱 알림은 딱 원하는 조건으로 세팅하기가 애매해서 직접 만들어보기로 했다.
목표
BTC 가격이 내가 정한 값에 도달하면 텔레그램으로 메시지가 오게 만드는 것.
구조
- 바이낸스 공개 API로 현재가 조회 (인증 필요 없음)
- 일정 주기로 반복 체크
- 조건 충족 시 텔레그램 봇으로 메시지 전송
코드
import requests
import time
BINANCE_URL = "https://api.binance.com/api/v3/ticker/price"
TELEGRAM_TOKEN = "봇_토큰"
CHAT_ID = "챗 아이디"
TARGET_PRICE = 65000
SYMBOL = "BTCUSDT"
def get_price():
res = requests.get(BINANCE_URL, params={"symbol": SYMBOL})
data = res.json()
return float(data["price"])
def send_telegram(message):
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
requests.post(url, data={"chat_id": CHAT_ID, "text": message})
def main():
alerted = False
while True:
price = get_price()
print(price)
if price >= TARGET_PRICE and not alerted:
send_telegram(f"BTC가 {TARGET_PRICE} 도달함. 현재가: {price}")
alerted = True
time.sleep(10)
main()
막힌 부분 1 — 텔레그램 chat_id를 몰랐다
봇 토큰은 바로 만들었는데, 메시지를 어디로 보내야 할지(CHAT_ID)를 몰라서 처음엔 계속 실패했다. 알고 보니 순서가 있었다.
- 텔레그램에서 내가 만든 봇한테 아무 메시지나 먼저 보낸다
- 브라우저로 https://api.telegram.org/bot<토큰>/getUpdates 접속
- 응답 json 안에 chat.id 값이 내 chat_id다
봇한테 먼저 말을 걸어야 getUpdates에 정보가 뜬다는 걸 몰라서 계속 빈 값만 받았다.
막힌 부분 2 — 알림이 계속 옴
처음엔 조건 체크할 때마다 알림을 보내게 짜서, 가격이 타겟 근처에서 왔다갔다 하니까 텔레그램이 도배됐다. alerted 플래그로 한 번 보내면 다시 안 보내게 막았다. 가격이 다시 타겟 아래로 내려가면 플래그를 초기화하는 로직을 추가하면 반복 알림용으로도 쓸 수 있을 것 같다.
정리
거래소 API는 공개 시세 조회는 인증 없이 바로 되니까 진입장벽이 낮다. 텔레그램 연동에서 chat_id 얻는 순서만 알면 나머지는 단순한 반복문 + 조건문 수준이라 금방 만들 수 있었다.
반응형
'Python' 카테고리의 다른 글
| [코딩 기초 트레이닝] 대소문자 바꿔서 출력하기 (0) | 2024.09.11 |
|---|---|
| [Python] Opencv의 imread 함수는 뭔가요? (2) | 2023.04.26 |
| [Python] Opencv로 이미지는 어떻게 불러오나요? (0) | 2023.04.24 |
| [Python] Opencv 개발환경 구축은 어떻게 하나요? (2) | 2023.04.22 |
| [Python] Opencv는 어떤 건가요? (4) | 2023.04.21 |