IT,참고자료

구글 스프레드 시트에서 실시간 가상화폐 현재가격 가져오기

unius 2023. 1. 16. 13:04
728x90
반응형

나는 2023년 올해부터 구글 스프레드 시트를 활용하여 나의 자산관리를 실시간에 가깝게 관리하고 있다. 한국 및 미국 주식은 googlefinance() 함수를 사용하고 펀드 기준가격 및 가상화페 현재가격은 importxml() 함수를 이용하고 있다. 이와 관련된 이전의 글들은 본문 하단의 링크를 참고하면 된다.

보름 정도 구글 스프레드 시트를 이용하여 관리하다 보니 몇가지 문제점들이 발생하였다. 첫번째는 googlefinance() 함수가 오류를 반환하는 경우가 있고 이를 해결하는 방법을 아래와 같이 포스팅한 적이 있다.

 

googlefinance() 함수의 #N/A 오류 시 importxml()로 웹 크롤링 하기

자산관리를 위해 구글 스프레드 시트를 사용하면서 (20분 지연된)실시간 데이터의 반영이 가능해졌다. 하지만 실제 보름 정도 사용해보니 googlefinance() 함수에서 의외로 #N/A를 반환하는 경우가 종

myportfolio.tistory.com

 

두번째 문제는 네이버 모바일 사이트에서 제공하는 가상화페 가격정보를 importxml() 함수를 사용하여 웹크롤링을 하여 가져오고 있었다. 하지만 문제는 설정된 xpath가 주기적으로 변경되는 듯 하였다. 결과적으로 한번 설정한 xpath가 며칠이 지나면 유효하지 않아서 정보를 가져올 수가 없는 현상이 반복되었다. 그로 인해서 가상화페의 가격이 계속해서 이전의 유효한 데이터를 사용하다보니 수익률 그래프가 변화없이 지속되는 현상이 발생하였다.

문제 해결을 위해 열심히 방법을 찾아보니 코인거래소 사이트에서 제공하는 Public API를 통해 해당 정보를 무료로 가져올 수가 있다는 사실을 알게 되었다. 국내 1, 2위 가상화페 거래소인 업비트와 빗썸에서는 제공하는 OpenAPI 문서는 아래 사이트에서 확인할 수 있다.

https://docs.upbit.com/docs/
https://apidocs.bithumb.com/reference

위 사이트의 문서를 살펴보면 현재가격뿐만 아니라 호가정보, 체결정보 등의 다양한 정보를 얻을 수가 있으며 REST API 형태로 접근할 수가 있다. 물론 자신의 계좌정보나 주문 관련 정보는 해당 거래소 사이트에서 private key를 발급받아야 이용 가능하다. 우리는 단지 가상화페의 가격 정보만 가져올 것이므로 private key를 발급받을 필요는 없다.

간단하게 업비트와 빗썸에서 REST API를 통해 특정 코인의 정보를 가져오는 방법은 아래와 같다.

https://api.upbit.com/v1/ticker?markets=KRW-BTC
https://api.bithumb.com/public/ticker/BTC_KRW

마지막 인자만 다른 코인의 심볼로 변경하면 해당 코인의 정보를 얻을 수가 있다. 예로 위 업비트의 API 주소를 인터넷 익스플로어 주소창에 입력하면 아래와 같이 보여진다.

위에서 우리가 얻고자 하는 현재가 데이터는 "trade_price" 항목이고 값은 26,102,000원 임을 확인할 수 있다. 여기까지가 각 코인 거래소에서 제공하는 공개된 REST API를 통해 정보를 얻어오는 과정이며 얻어온 정보에서 원하는 데이터를 골라서 구글 스프레드 시트에 표현하기 위해서는 구글 앱스크립트를 작성해야 한다. 앱스크립트 코드는 아래와 같다. 간단한 코드여서 별도의 설명은 생략한다. 그대로 copy&paste해서 사용해도 문제없다.

function getCoinPrice(exchange, coin) {
  if (exchange == null) {
    exchange = "upbit";
  }
  if (coin == null) {
    coin = "KRW-BTC";
  }
  
  if (exchange == "upbit") {
    url = "https://api.upbit.com/v1/ticker?markets="+coin;
  }
  else {
    url = "https://api.bithumb.com/public/ticker/"+coin;
  }
  var response = UrlFetchApp.fetch(url);
  var content = response.getContentText();
  var myjson = JSON.parse(content);
  if (exchange == "upbit") {
    var value = myjson[0]["trade_price"];
    return value;
  }
  else {
    var value = myjson["data"]["closing_price"];
    return parseFloat(value);
  }
}

그리고 구글 스프레드 시트에서 위 함수를 호출하여 원하는 코인의 가격을 얻어오는 수식은 아래와 같다.

IFERROR(getCoinPrice("bithumb","BTC_KRW"),getCoinPrice("upbit","KRW-BTC"))

이제 #N/A 걱정 없이 구글 스프레드 시트에서 항상 최신의 코인가격을 얻어올 수 있게 되었다.




728x90
반응형