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

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

비주얼 스튜디오 코드 설치

etc-image-0

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

etc-image-1

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

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

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

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

etc-image-2

이 데이터에는 별도의 시세정보는 없고 코인의 한글, 영문 이름과 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를 설치하고 비동기식으로 알람을 던졌다.

etc-image-3

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

etc-image-4

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