1.リモート実行される側のGoogleシートのスクリプトを作成


まずGoogleドライブ上に作成した、リモート実行”される側の”Googleシート上でスクリプトコードを作成します。

「ツール」-「スクリプトエディタ」でスクリプトエディタを開いて、「ファイル」-「プロジェクトのプロパティ」をクリック、任意のプロジェクト名を指定します。(ここでは”remoteAPIsSample”)



スクリプトコードを入力します。今回はサンプルでYahooファイナンスよりTOPIXの現値をセルに貼り付ける処理を作成しています。

  • YahooファイナンスのTOPIXのURLを”myXML”に読み込みます。
    var sURL = "https://stocks.finance.yahoo.co.jp/stocks/detail/?code=998405.T";
    var opt = {"contentType":"text/html","method":"get"};
    var myXml   = UrlFetchApp.fetch(sURL,opt).getContentText("utf-8");

    TOPIXの株価指数はHTMLソース中の「<td class = "stoksPrice"> (株価指数)</td>」で表記されているので、以下要領でここから指数だけを取り出します。

  • myXMLをsplit関数で「"stoksPrice">」を指定文字で分割します。(=sLineの配列2つ目に株価指数以降のHTMLソースコードが入る)
    var sLine = myXml.split("<td class=\"stoksPrice\">");

  • 同様にsLineをsplit関数で「</td>」を指定文字で分割します。(=sTopixPriceの配列1つ目に株価指数が入る)
    var sTopixPrice = sLine[1].split("</td>");

  • 最後に”シート1”の先頭セルに値をセットしますが、ここで1点、注意が必要です。
    var ss = SpreadsheetApp.openById('xxxxxxxxxxxxx').getSheetByName('シート1');
    ss.getRange(1, 1).setValue(sTopixPrice); 


    今回は別のGoogleシートからリモートでこのスクリプトを実行しようとしているので、ここのSpreadsheetApp関数でGoogleシートオブジェクトを取得する際に「getActiveSpreadsheet」メソッドを使用してしまうと"リモート実行する側のGoogleシート"に対して処理を反映しようとしてしまいます。

    ”openById”メソッドで、シートを更新したいGoogleシートのスプレッドシートキー(GoogleシートのURLの/d/と/editに囲まれた乱数英数字部分)を明示的に指定してオブジェクトを取得します。

試しにデバッグ実行してみます。権限許可を確認されるので「許可を確認」をクリック。



実行アカウントを選択



警告画面で”詳細”をクリックして(デフォルトでは下記リンクは非表示)、「実行可能APIサンプル(安全でないページ)に移動」をクリック



「許可」をクリック



TOPIXの現在値(2020/11/20付終値です)がセットされることが確認できます。あとでリモートコール処理でもここの値が更新されるか確認するので、データは一旦消しておきましょう。