[python]파이썬 업비트 API로 비트코인 시세 조회 후 텔레그램 알람 받기

오늘은 파이썬을 이용해 프로그램을 한번 짜보았다.
어떤 것을 해볼까 하다가 업비트에서 제공하는 코인의 시세를 조회에서 텔레그램으로 알람을 받아보기로 했다.
 

비주얼 스튜디오 코드 설치

일단 간단하게 파이썬을 해볼 수 있는 비주얼 스튜디오 코드를 설치했다.
비주얼 스튜디오 코드는 pc에서 간단히 실행할 수 있는 가볍지만 강력한 소스 코드 편집기이다.
 

왼쪽 메뉴중 사각도형 모양의 extensions을 클릭하고 python을 검색해 설치했다.
그리고 파일-[New File]을 눌러 원하는 이름의 py파일을 하나 만들어줬다.
 

업비트 시세 정보로 비트 코인 상승량 구하기

url = "https://api.upbit.com/v1/market/all?isDetails=true"
resp = requests.get(url)
tickers = resp.json()

직접 매매를 하거나 내 자산을 조회할 것이 아니기 때문에 api 키는 필요하지 않았고 업비트에서 제공하는 json 코인목록 데이터를 이용했다.

이 데이터에는 별도의 시세정보는 없고 코인의 한글, 영문 이름과 market 고유값이 제공된다.

while True:
    for ticker in tickers :
        if ticker["market"].startswith("KRW") : 
            process_start(ticker["market"],ticker["korean_name"])
            time.sleep(0.1)

한국 시세만을 가져올것이기에 startswith를 이용해 원화 거래소 정보만 걸러주었고 공통함수를 만들어 market 고유키와 한국이름을 넣어 구하고자 하는 코인의 시세를 각각 구했다.
 

def process_start(ticker,koreanName):
    try:
        now = pyupbit.get_current_price(ticker);
        num_str = str(round(now,2))
        #print(ticker+" 시작")
                
        if ticker == "KRW-BTC" :
            df = pyupbit.get_ohlcv(ticker, "minute15", count=2)
            //상승량 계산
            
            if total_cent < -0.5 :
                 asyncio.run(telegram_send(chat_id,"[비트코인-하락] 현재가격 : " + num_str + ",  " + total_cent_str + "%"))
            elif  total_cent < -0.8 :
                 asyncio.run(telegram_send(chat_id,"[비트코인-큰하락] 현재가격 : " + num_str + ",  " + total_cent_str + "%"))
            elif total_cent < -1.5 :
                 asyncio.run(telegram_send(chat_id,"[비트코인-대피해] 현재가격 : " + num_str + ",  " + total_cent_str + "%"))
            elif total_cent > 0.4 :
                 asyncio.run(telegram_send(chat_id,"[비트코인-상승전환] 현재가격 : " + num_str + ",  " + total_cent_str + "%"))
        else :
            df = pyupbit.get_ohlcv(ticker, "minute5", count=5)
            //상승량 계산
           
            print("["+koreanName+ "] 현재가격 : " + num_str + ",  " + total_cent_str + "% , 현재시간 : " + time.strftime('%m-%d %H:%M'))
            
            if total_cent > 20 :
                 asyncio.run(telegram_send(chat_id,"["+koreanName+ "-100% 가즈아] 현재가격 : " + num_str + ",  " + total_cent_str + "%"))
            elif total_cent > 10 :
                 asyncio.run(telegram_send(chat_id,"["+koreanName+ "-큰손왔다] 현재가격 : " + num_str + ",  " + total_cent_str + "%"))
            elif  total_cent > 5 :
                 asyncio.run(telegram_send(chat_id,"["+koreanName+ "-큰상승] 현재가격 : " + num_str + ",  " + total_cent_str + "%"))
            elif total_cent > 3  :
                 asyncio.run(telegram_send(chat_id,"["+koreanName+ "-상승] 현재가격 : " + num_str + ",  " + total_cent_str + "%"))
            elif total_cent < -5 :
                asyncio.run(telegram_send(chat_id,"["+koreanName+ "-큰하락] 현재가격 : " + num_str + ",  " + total_cent_str + "% "))
    except:
        print("error")
        asyncio.run(telegram_send(chat_id,"[봇 오류] " + ticker ))

코인의 시세를 구함에 있어서 필요했던건 코인들의 현재 시세와 과거의 종가들의 가격.
현재시세는 pyupbit.get_current_price()을 이용해 구했고 종가가격은 pyupbit.get_ohlcv()을 이용해 구했다.
원래는 거래량으로 구하려고 했는데 수치를 정하기가 너무 힘이 들었다.
 
그래서 비트코인(KRW-BTC)의 경우 minute15 (15분 봉) 종가를 구해와서 상승분을 계산하고 나머지 코인들은  minute5(5분봉) 종가를 이용해 상승분을 계산했다.
 
바꾸어말하면 비트코인은 현재시간에서 과거의 30분간 최종상승량이고 알트코인들은 과거의 15분간 최종상승량이다.

텔레그램으로 알람 받기

async def telegram_send(chat_id, text):
        print("telegram send : "+text)
        bot = telegram.Bot(token='텔레그램 api 토큰')
        await bot.send_message(chat_id,text)
        #bot.sendMessage(chat_id=chat_id, text=text)

asyncio.run(telegram_send(chat_id,"[봇 시작]"))

 
구해진 상승분은 내가 지정한 상승수치 조건에 따라 텔레그램으로 알람을 푸쉬했다.
원래는 bot.sendMessage(chat_id=chat_id, text=text) 만으로 푸시가 됐었는데 머가 바뀐 건지 갑자기 안되서
구글 검색 끝에  asyncio를 설치하고 비동기식으로 알람을 던졌다.

프로그램을 실행해보면 프로그램의 시작을 알리는 텔레그램 알람과 함께 모든 코인의 시세가 조회된다.
그리고 내가 원하는 상승량에 도달한 코인은 텔레그램으로 알람이 오게 된다.
 

아주 간편하게 파이썬을 이용해 비트코인의 상승과 하락 수치를 텔레그램 알람으로 오게 만들어 보았다.