GASでスプレッドシートに最新の株価/為替価格を自動出力する

リクエストで作成しました。Google Apps Script (GAS)とIEX CloudのAPIを用いて、スプレッドシートのA列にある複数の銘柄コードの株価を、B列のそれぞれの行に出力するということを行ったのでメモします。

APIはIEX Cloudのキーを使用しました。

IEX Cloudのキー取得

  1. IEX Cloudのウェブサイト(https://iexcloud.io/)にアクセスします。
  2. 右上にある”Sign Up”をクリックして新しいアカウントを作成します。すでにアカウントを持っている場合は”Login”をクリックします。
  3. アカウントにログインしたら、ダッシュボードに移動します。
  4. ダッシュボードにある”API Tokens”のセクションに、あなたのパブリック(公開)APIトークンが表示されます。
  5. このトークンをコピーして、リクエストの際にパラメータとして使用します。

株価を出力するスクリプト

スプレッドシートのA列にある複数の銘柄コードのそれぞれの株価を、B列の対応する行に出力するスクリプトはこちらです。

ChatGPT-4にベースを書いてもらい、私にて修正しました。

// IEX CloudのパブリックAPIキーをここに入力します
var API_KEY = 'YOUR_IEX_CLOUD_PUBLIC_API_KEY';

function fetchAndWriteStockPrice() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var symbols = sheet.getRange('A:A').getValues();  // A列から銘柄コードを取得

  for(var i = 0; i < symbols.length; i++) {
    var symbol = symbols[i][0].trim();
    if(symbol !== '') {  // 空白行は無視する
      var url = 'https://cloud.iexapis.com/stable/stock/' + symbol + '/quote?token=' + API_KEY;
      var response = UrlFetchApp.fetch(url);
      var json = JSON.parse(response.getContentText());
      var price = json['latestPrice'];
      Logger.log(price);
      // 取得した株価をB列の対応する行に出力
      sheet.getRange(i + 1, 2).setValue(price);
    }
  }
}

為替価格情報を追加する

// あなたのIEX CloudのパブリックAPIキーをここに入力します
var API_KEY = 'YOUR_IEX_CLOUD_PUBLIC_API_KEY';

function fetchAndWriteData() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var symbolsOrPairs = sheet.getRange('A:A').getValues();  // A列から銘柄コードまたは通貨ペアを取得

  for(var i = 0; i < symbolsOrPairs.length; i++) {
    var symbolOrPair = symbolsOrPairs[i][0].trim();
    if(symbolOrPair !== '') {  // 空白行は無視する
      var url, data;
      if (symbolOrPair.length > 5) {  // A列から銘柄コードまたは通貨ペアを取得、銘柄コードが5文字までは株価、6文字以上は通過ペアとして扱う
        // 為替価格を取得
        url = 'https://cloud.iexapis.com/stable/fx/latest?symbols=' + symbolOrPair + '&token=' + API_KEY;
        var response = UrlFetchApp.fetch(url);
        var json = JSON.parse(response.getContentText());
        data = json[0]['rate'];
      } else {
        // 株価を取得
        url = 'https://cloud.iexapis.com/stable/stock/' + symbolOrPair + '/quote?token=' + API_KEY;
        var response = UrlFetchApp.fetch(url);
        var json = JSON.parse(response.getContentText());
        data = json['latestPrice'];
      }
      Logger.log(data);
      // 取得したデータ(株価または為替価格)をB列の対応する行に出力
      sheet.getRange(i + 1, 2).setValue(data);
    }
  }
}

スプレッドシート上に更新ボタンを設置する

Google Apps Script (GAS)とGoogleスプレッドシートを連携させて、ボタンクリックでスクリプトを実行することができます。以下にその手順を説明します。

  1. スプレッドシートを開き、挿入メニューから「図形」を選択します。
  2. 好きな図形(ボタンとして使用するもの)を選択してスプレッドシートに描きます。
  3. 図形(ボタン)をクリックし、その後右クリックして「スクリプトエディタ」を選択します。
  4. ポップアップウィンドウで、ボタンに関連付けたい関数の名前(例:fetchAndWriteData)を入力します。
  5. 入力が完了したら「保存」をクリックします。

以上の手順でスプレッドシートにボタンを追加し、そのボタンをクリックすることで指定したGAS関数を実行することが可能となります。

ただし、これらの手順は初めてスクリプトを実行する場合、Googleによるアクセス許可の確認が求められることを含んでいます。確認を求められたら、スクリプトが実行する操作を許可してください。

また、ボタンをクリックした際に実行されるスクリプトが、指定された時間を超えて実行されることを防ぐために、適切なエラーチェックと例外処理を含めることが重要です。特に、スクリプトが外部APIを利用する場合は、APIが予期せぬエラーを返す可能性があることを考慮する必要があります。

スマホでスクリプトを実行したい場合

スマホで閲覧したい場合ですが、モバイルアプリケーションでは GAS(Google Apps Script)を直接実行することはできません。代替案は次の2通りです。

1. ウェブアプリケーションとしてスクリプトを公開する

Google Apps Scriptはウェブアプリケーションとして公開することができます。これにより、スクリプトはモバイルデバイス上の任意のウェブブラウザからアクセスできるようになります。

スクリプトがウェブアプリケーションとして公開されると、それは特定のURLに関連付けられ、このURLを開くことでスクリプトを実行できます。したがって、スプレッドシート内にリンクを作成し、そのリンクをタップすることでウェブアプリケーションを開くことができます。

2. スクリプトを時間ベースのトリガーに関連付ける:

スクリプトを定期的に自動実行するように設定することも可能です。例えば、スクリプトを時間ベースのトリガー(毎時、毎日、毎週など)に関連付けることで、そのスクリプトは定期的に実行されます。

ただし、これはスクリプトが特定の時間に自動的に実行されるため、モバイルデバイスからの即時の手動実行を必要とする場合には適していません。

上部へスクロール