GETリクエストしたい(doGet
)
1function doGet(e) {
2
3 // https://script.google.com/macros/s/スクリプトID/exec?name=John へのアクセス
4
5 // クエリから値を取得(?name=John)
6 const name = e.parameter.name;
7
8 // コンテンツを作成
9 const message = "Hello, " + (name ? name : "world") + "!";
10
11 // レスポンスを返す
12 return ContentService.createTextOutput(message).setMimeType(ContentService.MimeType.TEXT);
13};
doGet
関数は、GASでGETリクエストを処理するための関数です。
レスポンスはContentService.createTextOutput
などで生成し、ウェブアプリとしてデプロイできます。
上のサンプルでは、あるシートに紐づいたdoGet
関数を定義しています。
GETリクエストは
https://script.google.com/macros/s/スクリプトID/exec?name=John
を想定しています。
クエリが?name=John
となっているので、
e.parameter.name
でJohn
という値を取得できます。
またname
を使ってmessage
の文字列を作成しています。
そしてContentService.createTextOutput
を使ってレスポンスを作成しています。
今回はただのテキスト情報なので、MIMEタイプをTEXTにしています。
クエリを?name=Smith
に変更すると、レスポンスも変わることが想像できると思います。
デプロイしたい
GASのエディターからデプロイできます。
[デプロイ]
>[新しいデプロイ]
種類の選択:
ウェブアプリ
説明:
(アプリの説明)
次のユーザーとして実行:
[自分]
アクセスできるユーザー:
[全員]
テストしたい
1function testDoGetParameters() {
2 const e = {
3 "parameter": {
4 "name": "John"
5 }
6 };
7 const response = doGet(e);
8 const content = response.getContent();
9 Logger.log(`content: ${content}`)
10}
11
12function testDoGetURL() {
13 const base_url = ScriptApp.getService().getUrl();
14 Logger.log(`Base URL: ${base_url}`)
15 const query = "?name=John"
16 Logger.log(`Query: ${query}`)
17
18 const url = base_url + query
19
20 const options = {
21 "method": "GET",
22 "followRedirects": true,
23 };
24 const response = UrlFetchApp.fetch(url, options)
25 Logger.log(`response: ${response}`)
26}
UrlFetchAppで、doGet
関数の動作確認ができます。
シート名ごとに処理したい
1function doGet(e) {
2
3 // クエリからシート名を取得
4 const sheetName = e.parameter.sheetName;
5
6 // クエリが見つからない場合
7 if (!sheetName) {
8 msg = "シート名が指定されていません"
9 return ContentService.createTextOutput(msg).setMimeType(ContentService.MimeType.TEXT);
10 }
11
12 // スプレッドシートを取得
13 const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
14 const sheet = spreadsheet.getSheetByName(sheetName);
15
16 // シート名が見つからない場合
17 if (!sheet) {
18 msg = `指定されたシートが存在しません: ${sheetName}`
19 return ContentService.createTextOutput(msg).setMimeType(ContentService.MimeType.TEXT);
20 }
21
22 // シートの内容をJSON形式に変換する処理
23 // ...
24}
doGet
関数の実用的な(?)サンプルです。
ここでは、あるスプレッドシートに複数のシートがある場合を想定しています。
そして、シートごとに内容をJSON形式で公開し、外部からデータ処理できるようにしたいと考えています。
GASで公開したウェブアプリは
https://script.google.com/macros/s/スクリプトID/exec
でアクセスできるようになります。
クエリに?sheetName=シート名
とすることで、該当するシートのコンテンツにアクセスできます。
複数GETしたい
1DOGET = {
2 "action1": doGetOne,
3 "action2": doGetTwo,
4 "action3": doGetThree,
5}
6
7function doGet(e) {
8 const action = e.parameter.action
9 return DOGET[action](e)
10}
11
12function doGetOne(e){ ... }
13function doGetTwo(e){ ... }
14function doGetThree(e){ ... }
doGet
関数は、ひとつのプロジェクトで、ひとつしか定義できない、特殊な関数です。
しかし、スタンドアロンなプロジェクトから、
複数のプロジェクトを操作したいこともあります。
その場合、クエリーを使って分岐させます。