こんにちは、STEPN沼にハマっているt2と申します。
STEPNの資産や収支をスプレッドシートで管理されている方も多いと思いますので、
APIから現在の相場価格を自動取得する方法を解説してみたいと思います。
以下のようにメニューから任意のセルに価格取得する仕組みを作成します。
1)事前準備
価格取得はCoinMarketCapのAPIを利用します。無料プランでOK!
Developersサイトへアクセスし「GET YOUR API KEY NOW」からアカウント登録 → ダッシュボードへログインします。
ログインしたらOverview画面からAPI Keyをコピーしましょう。
2)新規のスプレッドシートを開きます。
3)メニューの「拡張機能」→「Apps Script」からApps Scriptエディタを開きます。
4)以下のソースコードをコピーしてエディタに貼り付けます。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var app_key = 'your-api-key'
var convert = 'JPY' // 米ドル換算の場合は"USD"
function onOpen() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu('カスタム');
menu.addItem('価格を取得', 'getPrice');
menu.addToUi();
}
function crypto(ticker) {
var url = "https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=" + ticker + "&convert=" + convert;
var requestOptions = {
method: 'GET',
headers: {
'X-CMC_PRO_API_KEY': app_key
},
json: true,
gzip: true
};
var result = UrlFetchApp.fetch(url, requestOptions);
var txt = result.getContentText();
var jsonData = JSON.parse(txt);
var path = "jsonData.data." + ticker + ".quote." + convert + ".price";
var price = eval(path);
return price;
}
function getPrice() {
var sheet = ss.getSheetByName( 'シート1' ); // シート名
// sheet.getRange('セル座標').setValue(crypto('シンボル名'));
sheet.getRange('A1').setValue(crypto('SOL'));
sheet.getRange('A2').setValue(crypto('GST'));
sheet.getRange('A3').setValue(crypto('GMT'));
sheet.getRange('A4').setValue(crypto('USDC'));
sheet.getRange('A5').setValue(crypto('BNB'));
}
5)2行目の"your-api-key"を1)で取得したAPI Keyへ置き換えます。
6)エディタを保存して、シートを再読込
以上で設定完了です。お疲れさまでした。
メニューが追加されているはずですので「カスタム」 → 「価格を取得」をクリック!
A1〜A5に価格が挿入されればOKです。
初回の実行時に「承認が必要」と出ますので続行し権限を許可してください。
※途中分かりづらいですが「安全ではないページへ移動」を選択します。
補足事項
- 3行目のconvertを”USD”等へ変更すると円以外で取得できます。
- 5行目のonOpen()関数内でメニューを定義しています。メニュー名などは自由に変更してください。
- 31行目のgetSheetByNameでシート名を変更できます。
- 34行目〜 取得するシンボルと挿入するセルを定義しています。色々なシンボルを試してみると面白いと思います。
今回紹介した方法は、他のAPIからの情報取得にも応用が可能です。
様々なAPIを利用して自分だけのドキュメントを作成してみてくださいね。
では!
追記:BSC側のGST価格を取得する方法
BSC(BNB Smart Chain)のGST価格は、現状ではSolana側とのチェーン間の移動ができないため、まったく異なる価格で推移しています。
BSC側のGST価格はPancakeSwap APIを利用することで簡単に取得することが可能です。
以下のコードをApps Scriptエディタのコードに追記してください。
// pancakeSwap API からトークン価格を取得する
function pancakeSwap(token) {
var url = 'https://api.pancakeswap.info/api/v2/tokens/' + token;
var requestOptions = {
method: 'GET',
json: true,
gzip: true
};
var result = UrlFetchApp.fetch(url, requestOptions);
var txt = result.getContentText();
var jsonData = JSON.parse(txt);
console.log(jsonData);
var path = "jsonData.data.price";
var price = eval(path);
return price;
}
価格取得を実行するgetPrice関数を以下の通り編集します。
function getPrice() {
var sheet = ss.getSheetByName( 'シート1' ); // シート名
// sheet.getRange('セル座標').setValue(crypto('シンボル名'));
sheet.getRange('A1').setValue(crypto('SOL'));
sheet.getRange('A2').setValue(crypto('GST'));
sheet.getRange('A3').setValue(crypto('GMT'));
sheet.getRange('A4').setValue(crypto('USDC'));
sheet.getRange('A5').setValue(crypto('BNB'));
// pancakeSwap APIから価格取得
sheet.getRange('A6').setValue(pancakeSwap('0x4a2c860cEC6471b9F5F5a336eB4F38bb21683c98')*crypto('USDC'));
}
pancakeSwap関数の引数に指定している「0x4a2c860cEC6471b9F5F5a336eB4F38bb21683c98」は、GSTのトークンアドレスとなります。他のトークンアドレスを指定すれば別通貨の価格も取得可能です。
また取得したGST価格はドル基準となるため、最後にcrypto('USDC')を乗算することで円基準へ変換しています。ドル基準のまま利用したい場合は削除してください。
以上で設定完了となります。
コードを保存し、スプレッドシートメニューの「カスタム」 → 「価格を取得」をクリックしてみましょう。A6セルにBSCのGST価格が表示されれば成功です。
追記は以上です!