GASのUrlfetchAppのHTTPリクエストの制限事項(URL長やリクエスト数の上限)

Google Apps Script(GAS)でウェブスクレイピングする際にはUrlfetchApp.fetchメソッドを利用します。

このHTTPリクエストには、リクエスト回数やURL長に制限事項があるので紹介します。

GASのスクレイピングにUrlfetchApp

Google Apps Script(GAS)では、ウェブページのスクレイピングやAPI通信がよく利用されます。

GASによるスクレイピングやAPIリクエストには、UrlFetchAppクラスを使用します。

Google Apps Script(GAS)でスクレイピングやAPIリクエストする場合に利用するUrlFetchAppクラスのリファレンス

UrlFetchAppクラスにはfetchメソッドが用意されていて、URLにフェッチするリクエストが実行可能です。

GASはサーバーレスのスクリプトサービスで、トリガーによる日次・週次・月次といったスケジュール登録ができます。

そのため、UrlFetchApp.fetchを活用したスクレイピングやAPI通信を行うGASスクリプトは色々なシーンで活用されています。

UrlfetchApp.fetchには制限事項あり

とても便利なGoogle Apps Script(GAS)のUrlFetchApp.fetchですが、制限事項も設けられています。

下記はGoogle公式のリファレンスで、GASの制限事項をまとめたページです。

Google Apps Script(GAS)の制限事項を記載したページにUrlFetchApp.fetchの実行回数に関する1日2万回の制限も記載

GASの実行ユーザーには、無料のGoogleアカウントのユーザーと、有償版のGoogle Workspaceのユーザーの2種類があります。

UrlFetchApp.fetchを使った、URLへのリクエスト実行回数は、赤枠のように上限が設けられています。

  1. 無料のGoogleアカウントのユーザー:1日2万回
  2. 有料のGoogle Workspaceユーザー:1日10万回

そのため、通常のGoogleアカウントでは、GASのURLフェッチは1日に2万回以上は実行できません。

実行回数以外にURL長も上限あり

なお、Google Apps Script(GAS)のUrlFetchApp.fetchには実行回数以外にも、制限事項があります。

UrlFetchApp.fetchのHTTP/GETによる翻訳を行うAPIリクエストを実行した際に、以下のエラーが実行ログに出力されました。

Google Apps Script(GAS)のUrlFetchApp.fetchでURL長の制限に該当し、2KBの上限を超えるURLを指定した場合のエラーメッセージ「Exception: Limit Exceeded: URLFetch URL Length.」

エラー Exception: Limit Exceeded: URLFetch URL Length.

 

このエラーはHTTP/GETのリクエストでURL長の上限を超えた場合にエラーが表示されます。

GASのUrlFetchApp.fetchのURL長が2KBよりも大きい長さだとエラーで実行不可能になります。

UrlFetchApp.fetchの引数に指定したURL長の上限超過は、通常のウェブサイトのスクレイピングではまず発生しません。

しかし、APIのリクエストを行う際、パラメータに大きな値を付与するとURL長が2KBを超えることがあります。

HTTPリクエスト時の制限リストまとめ

URL長以外にも、Google Apps Script(GAS)におけるHTTPリクエスト(UrlFetchApp.fetch)には制限事項があります。

Google Apps Script(GAS)のUrlFetchApp.fetchによるHTTPリクエストの実行制限の一覧表(Google公式リファレンス)

HTTP通信におけるレスポンス結果のサイズや、ヘッダーの個数、HTTP/POSTの通信サイズなどの制限があります。

GASのHTTPリクエスト関連の制限事項は、URLフェッチの実行回数も含めると、以下の表の6種類です。

GAS実行項目無料アカウント有料アカウント
URLフェッチ実行回数2万回/1日10万回/1日
URLフェッチのレスポンスサイズ50MB/1回50MB/1回
URLフェッチのヘッダー数100個/1回100個/1回
URLフェッチのヘッダーサイズ8KB/1回8KB/1回
URLフェッチのPOSTサイズ50MB/1回50MB/1回
URLフェッチのURL長2KB/1回2KB/1回

UrlFetchApp.fetchの実行回数以外は、無料・有料ユーザー関係なく、同じ制限事項となっています。

URL長の2KB制限超過の対処方法は?

もし、URL長の2KBの制限を超過してしまった場合、どのように対処すればよいのでしょうか。

残念ながら、URL長の圧縮等はGoogle Apps Script(GAS)では難しいです。

回避策としてHTTP/GETではなく、HTTP/POSTに切り替えることが挙げられます。

HTTP/POSTでの通信制限は、UrlFetchApp.fetchの1回実行あたり50MBです。

そのため、HTTP/GETでURLにパラメータ付与する形式から、HTTP/POSTのペイロードとしてデータを転送することで回避できます。

GAS以外でもURL長を制限するケースはあり、API側でHTTP/POSTも用意されていることが多いため、API側のドキュメントを確認しましょう。

まとめ・終わりに

今回、Google Apps Script(GAS)のスクレイピングやAPI通信で使用するUrlfetchAppの実行制限を紹介しました。

GASでHTTP通信を行うUrlFetchApp.fetchには、実行回数以外にも、通信サイズなどの制限が設けられています。

翻訳APIでHTTP/GETでURLに翻訳テキストをパラメータ付与するケースでは、翻訳したい文章が長いと、URL長が2KBの制限にひっかかり、実行エラーになります。

GASは無料で便利なスクリプトサービスのため、API通信にもよく用いられます分、実行上限が設けられています。

こうした制限事項を理解しておくと、GASをより使いこなせるようになるので、覚えておくのがオススメです。