GAS で URL Fetch に失敗したときに再試行する
GAS の URL Fetch Service を利用して Web API に接続する処理を書いたところ、ときどき接続に失敗してデータを取得できない場合があった。
トリガーを利用して定期実行していたので、リクエストの内容に問題がないにも関わらずデータの取得に失敗したときは、自動的に再取得を試行してもらいたかった。
UrlFetchApp のドキュメントを眺めてみたところ、 getResponseCode()
を利用すると HTTP ステータスコードを取得できるようなので、200 以外のときに数回再取得を試みてもらうようにした。2回目以降は Utilities.sleep()
を利用して、数秒の間隔を空けてから実行してもらう。
function fetchApi() { ... // 200のステータスコードが返されるまで3回実行する for (let i=0; i<3; i++) { try { response = UrlFetchApp.fetch(endpoint, options); } catch(e) { Logger.log(e); } if (getStatusCode(response) === 200) { break; } if (i >= 2) { return; } Utilities.sleep(5000); } return JSON.parse(response); } function getStatusCode(response) { if (response) { return response.getResponseCode(); } else { return 400; } }
今のところデータを取得できない事象は再発していないので、引き続き様子をみたいと思います。