Google Apps ScriptによるWebアプリケーションのパラメタの読み取り
doGet
GETメソッドによるHTTPリクエストでパラメタを受け取るには以下のようにして行う。
function doGet(e) { var greeting = e.parameter.greeting; return ContentService.createTextOutput(greeting); }
ここで、GETメソッドでこのWebアプリケーションにHTTPリクエストを送るには、Webブラウザから以下のURLを入力する。
https://script.google.com/macros/s/{id}/exec?greeting=こんにちは
結果は次のようになる。
こんにちは
また、以下のようなLinuxのcurlコマンドを使う方法もある。
curl -X GET -L https://script.google.com/macros/s/{id}/exec?greeting=こんにちは
curlコマンドの-Lオプションはリダイレクトを有効にするオプションである。GASで作成したWebAPIはリダイレクトを行っているため、このオプションが必要になる。なお、Linuxで日本語を入力する場合はURLエンコードしておく必要がある。
HTTPリクエストのGETメソッドでは、パラメタを以下のクエリストリングスで送る。
URL?key1=value1&key2=value2&key3=value3...
このクエリストリングスはdoGet関数の引数eのparameter属性で次のようなオブジェクトで格納されている。
{ "key1": "value1", "key2": "value2", "key3": "value3", ... }
よって、key1に対する値value1を取得するには、e.parameter.key1にアクセスすればよい。
GETリクエストを送るGASプログラム
上記のGETリクエストを処理するWebAPIを呼び出すには次のようなプログラムを書く。
const url = 'https://script.google.com/macros/s/{id}/exec'; const response = UrlFetchApp.fetch(url + '?greeting=こんにちは'); Logger.log(response);
doPost
POSTメソッドによるHTTPリクエストでパラメタを受け取るには以下のようにして行う。
function doPost(e) { const data = e.postData.getDataAsString(); return ContentService.createTextOutput(data); }
もし、POSTデータがJSON形式であれば、次のようにJSON.parse()メソッドを用いてオブジェクトに変換して使う。
function doPost(e) { const data = e.postData.getDataAsString(); const param = JSON.parse(data); return ContentService.createTextOutput(data); }
POSTメソッドを用いてHTTPリクエストを送信するGASプログラム
POSTメソッドでHTTPリクエストを送信する方法には、HTMLのフォームを使う方法、curlコマンドで-XオプションにPOSTを指定して-dオプションでデータを送る方法、GASのUrlFetchApp.fetchメソッドを使う方法など、様々な方法がある。
HTMLフォームでサブミット
<!DOCTYPE html> <head> <meta charset="UTF-8"> <title>doPostのテスト</title> </head> <body> <h1>doPostのテスト(Form送信)</h1> <form method="post" action="https://script.google.com/macros/s/{id}/exec"> <p> <label>名前 <input type="text" name="name"></label> </p> <p> <label>趣味 <input type="text" name="hobby"></label> </p> <p> <input type="submit" value="送信"> </p> </form> </body> </html>
この場合、e.postData.getDataAsString()で以下のようなデータが取得できる。
name=%E5%B7%9D%E5%B4%8E%E5%A4%AA%E9%83%8E&id=w3400000
また、e.parameterにはGETメソッドと同じように、入力パラメタがオブジェクト化されて設定しており、e.parameter.nameやe.parameter.hobbyでそれぞれのフォーム要素で入力されたデータを取得できる。
curlコマンド
curl -d 'Hello' -L https://script.google.com/macros/s/{id}/exec
ここで、-Lオプションはリダイレクトを有効にし、-dオプションは送信データを指定する。なお、リダイレクト先へはGETメソッドでリクエストすることになっているので -X POST を指定してはならない。なぜなら -X POSTを指定するとリダイレクト先へもPOSTメソッドでリクエストされるためエラーになるからである。curlコマンドは -X POSTを付けなくても -d オプションを指定していれば最初のリクエストは自動的にPOSTメソッドで送信する。
テキストデータを送るGASプログラム
function testPostMethod(){ var options = { "method" : "post", "payload" : "こんにちは" }; var url = 'https://script.google.com/macros/s/{id}/exec'; const response = UrlFetchApp.fetch(url, options); Logger.log(response); }
この場合、e.postData.getDataAsString()でテキスト「こんにちは」が取得できる。
JSON形式のデータを送るGASプログラム
// doPost関数のテストドライバ(JSON) function testPostMethodJSON(){ const data = { "id": "w3400000", "name": "川崎 太郎", }; var options = { "method" : "post", "contentType": "application/json", "payload" : JSON.stringify(data), }; var url = 'https://script.google.com/macros/s/{id}/exec'; const response = UrlFetchApp.fetch(url, options); Logger.log(response); }
この場合、e.postData.getDataAsString()で以下のようなJSON形式のデータ(文字列)が取得できる。
{"id":"w3400000","name":"川崎 太郎"}
Form形式のデータを送るGASプログラム
// doPost関数のテストドライバ(Form) function testPostMethodForm(){ var options = { "method" : "post", "payload" : {"name": "川崎太郎", "id": "w3400000"}, }; var url = 'https://script.google.com/macros/s/{id}/exec'; const response = UrlFetchApp.fetch(url, options); Logger.log(response); }
この場合、HTMLフォームでサブミットしたのと同じ結果が得られる。このようにフォームからサブミットでデータを入力するのと同じような結果を得たいならば、ペイロード部分にオブジェクト形式(連想配列あるいは辞書形式)でデータを設定する。
0 件のコメント:
コメントを投稿