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 件のコメント:
コメントを投稿