GCP/Apps Script

Apps Script로 UPbit API를 이용해 현재 시세를 가져와 카카오톡 메세지로 보내기

whistory 2023. 6. 2. 15:28
반응형

 

 

 

Apps Script로 Upbit api를 이용해 코인 시세를 매일 아침에 Telegram으로 조간 브리핑 받기

나는 비트코인이 물려있다. 빠른 시간에 탈출을 해야 한다. 그렇기 때문에 매일 아침 상황이 어떤지 확인하고 싶다. upbit에서 제공하는 api를 이용한다. function upbitMorningBriefing () { const coinArr = ["BTC

whiseung.tistory.com

 

예전에 UPbit api를 이용해 코인 시세를 매일 아침에 telegram으로 받는 걸 만들어봤다.

이제 이걸 telegram이 아니라 카카오톡 메세지로 받아보려 한다.

 

 

 

/**
 * nasdaq, upbit 시세 받기
 */
function goodMorningFinance() {
  const coinArr = ["BTC","ETH", "XRP"];
  var message   = "";
  var kakaoMessage   = "";
  for (i in coinArr) {
    const url       = `https://api.upbit.com/v1/ticker?markets=KRW-${coinArr[i]}`;
    const response  = UrlFetchApp.fetch(url, {
      method  : "GET",
      header  : {
        "contentType" : "application/json"
      }
    });

    const json        = response.getContentText();
    const returndData = JSON.parse(json);
    const data        = returndData[0];

    if ( i < 1 ) {
      kakaoMessage += `${data.trade_date_kst} ${data.trade_time_kst} 코인 시세\\\\n\\\\n`;
      message += `${data.trade_date_kst} ${data.trade_time_kst} 코인 시세\\r\\n\\r\\n`;
    }

    kakaoMessage += `종목\\\\t\\\\t: ${data.market}\\\\n현재가\\\\t: ${addComma(data.trade_price)}\\\\n오픈가\\\\t: ${addComma(data.opening_price)}\\\\n최고고가\\\\t: ${addComma(data.high_price)}\\\\n최저가\\\\t: ${addComma(data.low_price)}\\\\n추세\\\\t\\\\t: ${data.change}\\\\n\\\\n`;
    message += `종목\\t: ${data.market}\\r\\n현재가\\t: ${addComma(data.trade_price)}\\r\\n오픈가\\t: ${addComma(data.opening_price)}\\r\\n최고고가\\t: ${addComma(data.high_price)}\\r\\n최저가\\t: ${addComma(data.low_price)}\\r\\n추세\\t: ${data.change}\\r\\n\\r\\n`;
    
  }

  const nasdaqUrl       = "https://quote.cnbc.com/quote-html-webservice/restQuote/symbolType/symbol?symbols=.IXIC&requestMethod=itv&noform=1&partnerId=2&fund=1&exthrs=1&output=json&events=1";
  const responseNasdaq  = UrlFetchApp.fetch(nasdaqUrl, {  
                                                          method : "GET",
                                                          header:{
                                                            "contentType" : "application/json"
                                                          }
  });

  const jsonNasdaq        = responseNasdaq.getContentText();
  const returnNasdaqData  = JSON.parse(jsonNasdaq);
  const dataNasdaq        = returnNasdaqData.FormattedQuoteResult.FormattedQuote[0];

  message += `${dataNasdaq.shortName} (${dataNasdaq.last_time}) \\r\\n종가\\t: ${addComma(dataNasdaq.last)}\\r\\n오픈가\\t: ${addComma(dataNasdaq.open)}\\r\\n최고가\\t: ${addComma(dataNasdaq.high)}\\r\\n최저가\\t: ${addComma(dataNasdaq.low)}\\r\\n전일대비\\t: ${dataNasdaq.change}\\r\\n전일대비(%): ${dataNasdaq.change_pct}`;
  kakaoMessage += `${dataNasdaq.shortName} (${dataNasdaq.last_time}) \\\\n종가\\\\t\\\\t: ${addComma(dataNasdaq.last)}\\\\n오픈가\\\\t: ${addComma(dataNasdaq.open)}\\\\n최고가\\\\t: ${addComma(dataNasdaq.high)}\\\\n최저가\\\\t: ${addComma(dataNasdaq.low)}\\\\n전일대비\\\\t: ${dataNasdaq.change}`;
  
  sendTelegramMsg(message);
  kakao.sendKakaoMessageToMe(kakaoMessage);
}
function sendKakaoMessageToMe(message) {
  const NEW_TOKEN = getAuthRefresh();
  const url = "https://kapi.kakao.com/v2/api/talk/memo/default/send";

  var dataString = `template_object={
                      "object_type":  "text",
                      "text":"${message}",
                      "link":{
                            "web_url": "https://developers.kakao.com",
                            "mobile_web_url": "https://developers.kakao.com"
                      },
                      "button_title": "바로 확인"
                      }`;

  const options = {
    method: "POST",
    headers: { 
                Authorization: "Bearer " + NEW_TOKEN 
                , contentType: "application/x-www-form-urlencoded;charset=utf-8"
            },
    payload: dataString
  };
  const res = UrlFetchApp.fetch(url, options).getContentText();
  console.log(res);
}

function getAuthRefresh() {
  const url = "https://kauth.kakao.com/oauth/token";

  data = {
    "grant_type"   : "refresh_token",
    "client_id"    : CLIENT_ID,
    "redirect_uri" : "https://whiseung.tistory.com",
    "refresh_token": REFRESH_TOKEN
   }

  const options = {
    contentType: "application/x-www-form-urlencoded;charset=utf-8",
    headers: { 
                Authorization: "Bearer " + CLIENT_ID 
            },
    payload: data
  };
  const res = UrlFetchApp.fetch(url, options).getContentText();
  const returndData = JSON.parse(res);

  return returndData.access_token;
}

반응형