호랑이한테물릴래

코인 시세 알려주는 텔레그램 봇 만들기 with node-telegram-bot-api 본문

개발/Javascript

코인 시세 알려주는 텔레그램 봇 만들기 with node-telegram-bot-api

호랑이한테물릴래 2022. 7. 21. 10:16
반응형

매번 거래소 사이트에 접속해서 시세를 알아보는게 여간 귀찮은게 아니다. 5G가 아니면 접속하는데 은근히 시간이 많이 소요된다.

그래서 빠르게 응답할 수 있는 텔레그램 봇을 이용해서 원하는 코인 시세만 확인할 수 있는 서버를 만들었다. AWS lambda를 활용할 수 있도록 terraform도 구성해봤다.

코인의 Ticker만 입력하면 실시간 시세(KRW)를 확인할 수 있다.

  • 사용한 라이브러리 : axios, node-telegram-bot-api
  • 시세 API : upbit
//app.js

require("dotenv").config();
const axios = require("axios").default;

const TelegramBot = require("node-telegram-bot-api");
const token = process.env.TOKEN;

// Create a bot that uses 'polling' to fetch new updates
const bot = new TelegramBot(token, { polling: true });

// Matches "/echo [whatever]"
bot.onText(/\/help (.+)/, (msg, match) => {
  const chatId = msg.chat.id;
  const resp = match[1]; // the captured "whatever"
  bot.sendMessage(chatId, resp);
});

bot.on("message", (msg) => {
  var ticker_l = msg.text.toString().toLowerCase();
  var ticker_h = ticker_l.toUpperCase();
  {
    axios
      .get("https://api.upbit.com/v1/ticker?markets=KRW-" + ticker_h)
      .then(function (response) {
        const resp = response.data[0].trade_price;
        const price = resp.toLocaleString() + "원";

        bot.sendMessage(msg.chat.id, price); //bot에 보내기
        console.log(price);
      })
      .catch(function (error) {
        console.log(error);
      })
      .then(function () {});
  }
});

생각보다 간단하다. 위 코드를 보면 알 수 있듯이 특정 코인의 ticker만 채팅창에 입력하면 해당하는 코인의 시세를 get 요청으로 응답받는다. 

curl --request GET \
     --url https://api.upbit.com/v1/ticker \
     --header 'Accept: application/json'

위처럼, GET요청을 하면 아래와 같은 payload를 전달받게 되고 여기서 필요한 value만 정리해서 텔레그램에 전달하면 된다.

[
  {
    "market": "KRW-BTC",
    "trade_date": "20180418",
    "trade_time": "102340",
    "trade_date_kst": "20180418",
    "trade_time_kst": "192340",
    "trade_timestamp": 1524047020000,
    "opening_price": 8450000,
    "high_price": 8679000,
    "low_price": 8445000,
    "trade_price": 8621000,
    "prev_closing_price": 8450000,
    "change": "RISE",
    "change_price": 171000,
    "change_rate": 0.0202366864,
    "signed_change_price": 171000,
    "signed_change_rate": 0.0202366864,
    "trade_volume": 0.02467802,
    "acc_trade_price": 108024804862.58253,
    "acc_trade_price_24h": 232702901371.09308,
    "acc_trade_volume": 12603.53386105,
    "acc_trade_volume_24h": 27181.31137002,
    "highest_52_week_price": 28885000,
    "highest_52_week_date": "2018-01-06",
    "lowest_52_week_price": 4175000,
    "lowest_52_week_date": "2017-09-25",
    "timestamp": 1524047026072
  }
]

자세한 사용법은 아래 upbit 개발자 센터를 참고.

https://docs.upbit.com/reference/ticker%ED%98%84%EC%9E%AC%EA%B0%80-%EB%82%B4%EC%97%AD

 

업비트 개발자 센터

업비트 Open API 사용을 위한 개발 문서를 제공 합니다.업비트 Open API 사용하여 다양한 앱과 프로그램을 제작해보세요.

docs.upbit.com

앞으론 ticker를 입력하면 원화시세와 함께 김치프리미엄과, 전날기준 변동률까지 나타낼 수 있도록 만들어볼 생각이다.

반응형
0 Comments
댓글쓰기 폼