まずGoogleドライブ上に作成した、リモート実行”される側の”Googleシート上でスクリプトコードを作成します。
「ツール」-「スクリプトエディタ」でスクリプトエディタを開いて、「ファイル」-「プロジェクトのプロパティ」をクリック、任意のプロジェクト名を指定します。(ここでは”remoteAPIsSample”)
「ツール」-「スクリプトエディタ」でスクリプトエディタを開いて、「ファイル」-「プロジェクトのプロパティ」をクリック、任意のプロジェクト名を指定します。(ここでは”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付終値です)がセットされることが確認できます。あとでリモートコール処理でもここの値が更新されるか確認するので、データは一旦消しておきましょう。