UrlFetchApp.fetch URLにアクセスを行う結果を取得する | GoogleAppsScript リファレンス URL Fetch

GoogleAppsScriptのコードから通信を行い、htts/https通信にてWebリソースにアクセスするためのクラス、メソッドになります。

外部サービスで提供されているAPIやhtmlコンテンツを取得して解析したりと様々なユースケースが存在しますので覚えておくと便利です。

実行例 UrlFetchApp.fetch URLにアクセスを行う結果を取得する

本サイト内でも様々なUrlFetchApp.fetchを使った利用例を紹介していますので、参照してみてください。以下記事は身近で分かりやすいです。

リファレンス

UrlFetchApp.fetch(url)

使い方はシンプルでurlを引数に与えて実行することで結果を取得できます。

レスポンスはHTTPResponseクラスとして返却されます。よく使う取り出しメソッドを紹介します。

methodtypedesctiption
getAllHeaders()ObjectHTTPヘッダの属性/値マップを返します。複数の値を持つヘッダーは配列として返されます。
getContentText()String文字列としてエンコードされたHTTP応答のコンテンツを取得します。
getContentText(charset)String指定された文字セットの文字列としてエンコードされたHTTP応答のコンテンツを返します。
getHeaders()ObjectHTTPレスポンスのヘッダーの属性/値マップを返します。
getResponseCode()IntegerHTTP レスポンスのHTTPステータスコード(OKの場合は200など)を取得します。

成功判定にはgetResponceCodeを利用してhttpステータスコードが200かどうかを見る、中身を取り出したい場合はgetHeadersやgetContentTextを取得します。

実行サンプル

まずは一番シンプルな例です。GoogleのホームページURLから取得してみます。

function myFunction() {
  var response = UrlFetchApp.fetch("http://www.google.com/");
  Logger.log(response.getContentText());
}

実行後にエディタの表示→ログを見てみると以下の通り、Googleのコンテンツを取得できていることが分かります。

実際に利用する際には取得したコンテンツを使いやすい形に加工してスプレッドシート内に保管する、メールなどの別サービスに連携するように使い方が一般的です。

getResponseCodeを使ってエラー判定処理を行う

httpステータスコードは簡単にいうと通信の成否状況が分かるステータスです。色々な意味がありますが、ひとまず以下を覚えておくのがよいでしょう。

  • 200:成功
  • 400番台:クライアント(利用者側)の問題による失敗。ネットワークエラーなど
  • 500番台:サーバ(提供側)の問題による失敗。サーバが落ちているケースなど

試しに上記の例を使ってgetResponseCodeからhttpステータスコードを取得します。

function myFunction() {
  var response = UrlFetchApp.fetch("http://www.google.com/");
  Logger.log(response.getResponseCode());
}

再度ログを見てみると200が取得されていることが分かります。

paramsの指定を行う

外部サービスが提供しているWebAPIなどで良く見られる仕様として、POSTリクエストの指定、headerのパラメータを指定するケースが存在します。

そういった場合はfetch実行時に付与するパラメータを連携する必要があるのですが、以下の通り2つ目の引数にセットしてリクエストします。

function myFunction() {
  // postメソッドで通信を行う場合
  var options = {
    'method' : 'post'
  };
  // 2つ目の引数に先ほど生成したoptionsを指定する
  var response = UrlFetchApp.fetch("http://www.google.com/", options);
}

実際の利用ケースとして以下を参考にしてみてください。fetchする手前で要求されている、いくつかのパラメータをセットして引数に指定して利用しています。

タイトルとURLをコピーしました