Ccmmutty logo
Commutty IT
6 min read

Google Apps Script (GAS)で仮想通貨の価格を取得してみた@STEPN用

https://cdn.magicode.io/media/notebox/36e00e90-9cc2-498f-adb9-c64e0898d64c.jpeg

前書き

最近GASの利便性に気づいたので、先日学んだCoinMarketCap APIをGASで使ってみました!

やったこと

  • Web API用スクリプトを作成
    • main.gs
    • method.gs
  • スクリプトプロパティにCoinMarketCapのAPIキーを設定

Web API用スクリプトを作成

main.gs

こちらのファイルでは
  • 外部APIを叩いて仮想通貨の価格情報を取得
  • 取得した情報を整形してレスポンスとして返却 ということを行っています
function doGet(e) {

  var API_KEY;

  // スクリプトプロパティからAPI_KEYを取得する
  const scriptProperties = PropertiesService.getScriptProperties();
  const properties = scriptProperties.getProperties();
  for (const key in properties) {
    if (key == "API_KEY"){
      API_KEY = properties[key];
      break
    }
  }

  var url = 'https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest';

  // -- cryptocurrency ids -- //
  // solana : 5426
  // green-satoshi-token : 16352
  // bnb : 1839
  // green-satoshi-token-bsc : 20236
  // green-metaverse-token : 18069
  // bitcoin : 1
  // usd-coin : 3408
  var cryptocurrencyIds = ["5426","16352","1839","20236","18069","1","3408"];

  // リクエストのオプション設定
  var queryParams = {
    'id':cryptocurrencyIds.join(),
    'convert':'USD'
  };

  var headers = {
    'Accepts':'application/json',
    'X-CMC_PRO_API_KEY':API_KEY
  };

  var options = {
    'headers':headers,
    'muteHttpExceptions': true
  };

  // 各仮想通貨のUSD価格情報を取得
  requestUrl = generateRequestUrl(url, queryParams);
  var cryptocurrencyDetails = JSON.parse(UrlFetchApp.fetch(requestUrl,options).getContentText());
  
  // USD → JPYのレート取得のため別途APIを実行
  var queryParams = {
    'id':'5426',
    'convert':'JPY'
  };
  requestUrl = generateRequestUrl(url, queryParams);
  var solJpyDetails = JSON.parse(UrlFetchApp.fetch(requestUrl,options).getContentText());

  // USD → JPYレート
  solUsd = cryptocurrencyDetails['data']['5426']['quote']['USD']['price']
  solJpy = solJpyDetails['data']['5426']['quote']['JPY']['price']
  usdToJpy = solJpy/solUsd

  // レスポンス用にデータ整形
  var responseData = [];
  for (index in cryptocurrencyIds) {
    var data = cryptocurrencyDetails['data'][cryptocurrencyIds[index]];

    var details = {
      'id':data['id'],
      'slug':data['slug'],
      "name":data['name'],
      "symbol": data['symbol'],
      "jpy": data['quote']['USD']['price']*usdToJpy,
      "usd": data['quote']['USD']['price'],
      "dtLastUpdated": data['last_updated']
    };
    responseData.push(details)
  }

  // 「Content service TextOutput object」としてレスポンスを生成
  var res = ContentService.createTextOutput();
  res.setMimeType(ContentService.MimeType.JSON);
  res.setContent(JSON.stringify(responseData));

  return res;
}

method.gs

こちらは関数群をまとめたファイルになります
(群と言いつつ一つだけしかないですが、メイン処理とは分けた方が綺麗...なはず!w)
// リクエストURLを生成する関数
function generateRequestUrl(endpoint, queryParams){
    if (!endpoint){
        throw "エンドポイントが指定されていません。";
    }

    isFirstParam = true;
    requestUrl = endpoint;

    // クエリパラメータの指定があれば付与
    if (queryParams){
        for (param in queryParams){
            if (!queryParams[param]){
                return true;
            };

            delimiter = (isFirstParam ? '?' : '&');
            requestUrl = requestUrl + delimiter + param + '=' + String(queryParams[param]);
            isFirstParam = false;
        };
    };
    return requestUrl
}

スクリプトプロパティにCoinMarketCapのAPIキーを設定

CoinMarketCap APIを取得

まずは↓を参考にCoinMarketCap APIのAPIキーを取得します!
※仮想通貨の価格を取得するのに必要になります。

スクリプトプロパティに設定

GASのプロジェクトの設定(歯車マーク)にスクリプトプロパティというものがあるのでそこでAPI_KEYという名前で設定してください。

実行例

作成したスクリプトをデプロイしてアプリのURLを叩いてみると、このようなレスポンスが返ります。
(GSTの下落が止まらないですねぇorz)
以上です!
閲覧いただきありがとうございました。みなさんのお役に立てましたら幸いです!
コメントやいいねしていただけますと励みになります☺️
■著作権について
※コードはコピーせず参考としてみていただくようお願い申し上げます
利用者が本サービスを利用して投稿または編集した文章、画像等の著作権については、当該利用者あるいは既存の権利者に留保されるものとします。

Discussion

コメントにはログインが必要です。