투자.재테크

[구글 스프레드시트] 업비트 API 결과값 업데이트 안 될경우

헬로덱 2024. 11. 18. 09:27
반응형

 

2024.11.14 - [투자.재테크] - [구글 스프레드시트] 업비트 코인 현재 가격 / 전일 가격 가져오기

 

[구글 스프레드시트] 업비트 코인 현재 가격 / 전일 가격 가져오기

구글 스프레드시트에서 코인 티커를 입력하면 오늘과 전일의 시가/고가/저가/종가를 가져올 수 있습니다. 1. 스크립트 작성메뉴 - 확장 프로그램 - Apps Scrip 클릭function getCoinPrice(ticker, type) { // 업

meisterjw.tistory.com

 

지난 글에서 Apps Sctipt를 이용하여 코인의 실시간 현재 가격을 가져오도록 만들었습니다. 

그런데 다음날 보면 아침 9시 이후에도 새로운 값을 가져오지 못하는 경우가 있었습니다. 

새로 함수를 작성해서 셀에 입력해보면 잘 가져오는 것 같아 방법을 찾아보았습니다.

계산량을 줄이기 위해 자동으로 리프레시를 잘 안 해주는 것 같아 flush를 하도록 하겠습니다. 

추가

  SpreadsheetApp.flush(); // 강제로 계산 요청

 

추가된 최종버전

function clearValues() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange('A4:J1000'); // 값을 지우려는 셀 영역을 지정합니다.
  range.clearContent(); // 셀 영역의 내용을 지웁니다.
}

function getCoinPrice(ticker, type) {
  // 업비트 API URL 설정
  const url = `https://api.upbit.com/v1/candles/days?market=KRW-${ticker}&count=2`;
  const urlTicker = `https://api.upbit.com/v1/ticker?markets=KRW-${ticker}`;
  
  try {
    // 어제와 오늘 데이터를 가져오기 위해 일봉 API 호출
    const response = UrlFetchApp.fetch(url, { method: 'get', muteHttpExceptions: true });
    const data = JSON.parse(response.getContentText());
    
    // 현재가 데이터를 가져오기 위해 티커 API 호출
    const responseTicker = UrlFetchApp.fetch(urlTicker, { method: 'get', muteHttpExceptions: true });
    const tickerData = JSON.parse(responseTicker.getContentText());

    // 어제 데이터 (index 1)와 오늘 데이터 (index 0) 가져오기
    const yesterdayData = data[1];
    const todayData = data[0];
    const currentPrice = tickerData[0].trade_price;
    
    SpreadsheetApp.flush(); // 강제로 계산 요청

    // type 파라미터에 따라 적절한 값을 반환
    switch (type.toLowerCase()) {
      case 'h':
        return yesterdayData.high_price;    // 전일 고가
      case 'l':
        return yesterdayData.low_price;     // 전일 저가
      case 'o':
        return todayData.opening_price;     // 오늘 시가
      case 'c':
        return currentPrice;                // 현재가
      default:
        return "Invalid type parameter";    // 잘못된 파라미터 입력 시 오류 메시지 반환
    }
  } catch (error) {
    return "Error fetching data";
  }
}

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

반응형