GASパラメタ読み取り

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

コメントを投稿