このポストの目的
Google Apps Scriptを用いてアプリケーションを開発する際に、外部のWebAPIへアクセスする場合があります。その際に利用する、URL Fetch Serviceの利用方法をまとめます。
もとの情報はGoogleの開発者サイトのリファレンス(G Suite Developer / URL Fetch Service )を参考にしています。
URL Fetch Service
URL Fetch Serviceは2つのクラスから構成されます。
- UrlFetchApp
- HTTPクライアント用のクラス。
- HTTP Respose
- UrlFetchAppで取得したHTTPレスポンスを管理するためのクラス。
UrlFetchApp
HTTPクライアント用のクラスです。今回の例の場合はこのクラスを利用してWebAPIに接続します。
HTTP GETを行う場合
fetch
関数にURLを渡します。下記のコードは、OpenBDという書籍APIにアクセスする例です。GETリクエストで、QueryStringにパラメータ(ISBN)を渡した場合の記述方法です。
var response = UrlFetchApp.fetch('https://api.openbd.jp/v1/get?isbn=' + isbn);
HTTP POSTを行う場合
POST用のボディは、options
としてfetch
関数に渡します。
var book = {
'title': 'すべてがFになる',
'comment': 'ドキドキして面白かった'
};
var options = {
'method' : 'post',
'contentType': 'application/json',
'payload' : JSON.stringify(book)
};
var response = UrlFetchApp.fetch('https://httpsample.org/book', options);
補足:パラメータとボディの作り方
options
のパラメータにはヘッダ、HTTPメソッドなどがあります。こちらに整理(Advanced Parameters)されています。上の例では、JSON.stringify
を利用してオブジェクトをJSON形式に変換して、payload(ボディ)に詰めています。
HTTP Response
UrlFetchApp.fetch
でレスポンスを無事に取得できたら、その結果はHTTP Responseクラスに格納されます。
HTTPレスポンスコードを取得する
HTTPリクエストが正常に終わったかを確認するために、HTTPレスポンスコードを取得できます。
var code = response.getResponseCode();
// responseはfetchの返り値です。以下も同じ。
// codeはIntegerとなる(例:200)
HTTPレスポンスのボディを取得する
ボディはgetContextText()
で取得します。
var content = response.getContentText();
// contentはStringとなる。
JSONデータをオブジェクトに変換する
単純なStringのままではプログラム中で処理しづらいため、オブジェクトに変換します。
var o = JSON.parse(response.getContentText());
// oはObjectとなる。もとのJSON構造に合わせてプロパティでアクセスできます。
以上です。