暗号資産(仮想通貨)価格を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がデフォルトと設定されいるため、引数を指定しなかった場合はこちらの情報が取得されます。