暗号資産(仮想通貨)価格をGoogle Apps Script(GAS)とbitbank・bitFlyer・GMOコイン public APIを用いてGoogleスプレッドシート上で取得する

Googleスプレッドシート上で暗号通貨価格を取得するためには、GOOGLEFINANCE関数があります。しかしながら、いくつかの主要な銘柄を除いて、反応しません。そこで以前、暗号通貨取引所bitbankのpublic APIを利用し、取引価格を取得するCRYPTOFINANCE関数を定義しました
今回は、これを拡張し、bitbank、bitFlyer、GMOコインのそれぞれのAPIを利用し、3つの取引所の価格情報を取得できるようにしました。

Googleスプレッドシートのツールバーの[ツール]ー[スクリプトエディタ]の順に開き、以下のコードを貼り付けることで利用できます。スクリプトエディタの開き方はこちらを参考にしてみてください。

//取引価格取得関数
function cryptoFinance (name, exchange = 'bitbank', dataSelector = 'last') {
 const result = getCoinData(name, exchange, dataSelector);
 return result;
}
//取引価格の取得
function getCoinData (name, exchange, dataSelector) {
 let URL_API;
 let PATH;
 let result;
 const symbol = symbolMaker(name, exchange);
 const key = keyMaker(exchange, dataSelector);
 switch (exchange) {
   //bitbank public API
   case 'bitbank':
     URL_API = 'https://public.bitbank.cc/';
     PATH = '/ticker';
     //API用にシンボルを整形
     result = Number(JSON.parse(UrlFetchApp
                                 .fetch(URL_API + symbol + PATH)
                                 .getContentText()).data[key]);
     Logger.log('bb');
     break;
   //bitFlyer Lightning API
   case 'bitFlyer':
     URL_API = 'https://api.bitflyer.com';
     PATH = '/v1/ticker';
     result = JSON.parse(UrlFetchApp
                               .fetch(URL_API + PATH + '?product_code=' + symbol)
                               .getContentText())[key];
     Logger.log('bF');
     break;
   //GMOコイン API
   case 'gmoCoin':
     URL_API = 'https://api.coin.z.com/public';
     PATH = '/v1/ticker';
     result = Number(JSON.parse(UrlFetchApp
                               .fetch(URL_API + PATH + '?symbol=' + symbol)
                               .getContentText()).data[0][key]);
     Logger.log('gC');
     break;
   default:
     Logger.log('No data');
 }
 return result;
}
//data配列のkeyを生成
function keyMaker (exchange, dataSelector) {
 let result;
 switch (dataSelector) {
   case 'last':  //最新の取引価格
     switch (exchange) {
       case 'bitbank':
         result = 'last';
         break;
       case 'bitFlyer':
         result = 'ltp';
         break;
       case 'gmoCoin':
         result = 'last';
         break;
       default:
         Logger.log('No data');
     }
     break;
   case 'sell':  //最近の売り注文価格
     switch (exchange) {
       case 'bitbank':
         result = 'sell';
         break;
       case 'bitFlyer':
         result = 'best_ask';
         break;
       case 'gmoCoin':
         result = 'ask';
         break;
       default:
         Logger.log('No data');
     }
     break;
   case 'buy': //最近の買い注文価格
     switch (exchange) {
       case 'bitbank':
         result = 'sell';
         break;
       case 'bitFlyer':
         result = 'best_bid';
         break;
       case 'gmoCoin':
         result = 'bid';
         break;
       default:
         Logger.log('No data');
     }
     break;
   default:
     Logger.log('No data');
 }
 return result;
}
//symbolを生成
function symbolMaker (name, exchange) {
 let result;
 switch (name) {
   case 'BTC':
     switch (exchange) {
       case 'bitbank':
         result = 'btc_jpy';
         break;
       case 'bitFlyer':
         result = 'btc_jpy';
         break;
       case 'gmoCoin':
         result = 'BTC';
         break;
       default:
         Logger.log('No data');
     }
     break;
   case 'ETH':
     switch (exchange) {
       case 'bitbank':
         result = 'eth_jpy';
         break;
       case 'bitFlyer':
         result = 'eth_jpy';
         break;
       case 'gmoCoin':
         result = 'ETH';
         break;
       default:
         Logger.log('No data');
     }
     break;
   case 'LTC':
     switch (exchange) {
       case 'bitbank':
         result = 'ltc_jpy';
         break;
       case 'gmoCoin':
         result = 'LTC';
         break;
       default:
         Logger.log('No data');
     }
     break;
   case 'XRP':
     switch (exchange) {
       case 'bitbank':
         result = 'xrp_jpy';
         break;
       case 'gmoCoin':
         result = 'XRP';
         break;
       default:
         Logger.log('No data');
     }
     break;
   case 'MONA':  //bitbankのみ
     result = 'mona_jpy';
     break;
   case 'BCC':   //bitbankのみ
     result = 'bcc_jpy';
     break;
   case 'BCH':   //GMOコインのみ
     result = 'BCH';
     break;
   default:
     Logger.log('No data');
 }
 return result;
}

利用時は通貨のシンボル、取引所名(bitbank、bitFlyer、gmoCoin)、取得情報(last、buy、sell)を指定することで暗号通貨取引所の最新の取引価格(日本円)を取得できます。 例:cryptoFinance("BTC","bitFlyer","last")
なお、取引所名と取得情報に関してはbitbank、lastがデフォルトと設定されいるため、引数を指定しなかった場合はこちらの情報が取得されます。

この記事が気に入ったらサポートをしてみませんか?