GASのUrlfetchAppのHTTPリクエストの制限事項(URL長やリクエスト数の上限)
Google Apps Script(GAS)でウェブスクレイピングする際にはUrlfetchApp.fetchメソッドを利用します。
このHTTPリクエストには、リクエスト回数やURL長に制限事項があるので紹介します。
GASのスクレイピングにUrlfetchApp
Google Apps Script(GAS)では、ウェブページのスクレイピングやAPI通信がよく利用されます。
GASによるスクレイピングやAPIリクエストには、UrlFetchAppクラスを使用します。
UrlFetchAppクラスにはfetchメソッドが用意されていて、URLにフェッチするリクエストが実行可能です。
GASはサーバーレスのスクリプトサービスで、トリガーによる日次・週次・月次といったスケジュール登録ができます。
そのため、UrlFetchApp.fetchを活用したスクレイピングやAPI通信を行うGASスクリプトは色々なシーンで活用されています。
UrlfetchApp.fetchには制限事項あり
とても便利なGoogle Apps Script(GAS)のUrlFetchApp.fetchですが、制限事項も設けられています。
下記はGoogle公式のリファレンスで、GASの制限事項をまとめたページです。
GASの実行ユーザーには、無料のGoogleアカウントのユーザーと、有償版のGoogle Workspaceのユーザーの2種類があります。
UrlFetchApp.fetchを使った、URLへのリクエスト実行回数は、赤枠のように上限が設けられています。
- 無料のGoogleアカウントのユーザー:1日2万回
- 有料のGoogle Workspaceユーザー:1日10万回
そのため、通常のGoogleアカウントでは、GASのURLフェッチは1日に2万回以上は実行できません。
実行回数以外にURL長も上限あり
なお、Google Apps Script(GAS)のUrlFetchApp.fetchには実行回数以外にも、制限事項があります。
UrlFetchApp.fetchのHTTP/GETによる翻訳を行うAPIリクエストを実行した際に、以下のエラーが実行ログに出力されました。
エラー 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)には制限事項があります。
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をより使いこなせるようになるので、覚えておくのがオススメです。
ディスカッション
コメント一覧
まだ、コメントがありません