UrlFetchApp.fetchAllでHTTPステータス404が返るページを含むURLをフェッチしたい
Date:
Google Apps ScriptのUrlFetchApp.fetchallで複数のサイトのURL情報を取得しようとしたとき、存在しないサイトがリストに含まれるとfetchall自体が例外処理を返してしまう。フェッチするURLが1件の場合は try chatchで処理できるのだけど、fetchallで複数URLを取得しようとしたとき、どのURLがエラーになったのかがわからずちょっとハマったので備忘。
muteHttpExceptions
リクエストパラメーターにmuteHttpExceptions: true を指定すると、例外処理の発生をせずに処理が継続される。また、結果から .getResponseCode() にて、HTTPステータスコードが取得できるので、4xx、5xx系のエラーなどステータスに応じて必要な処理が書ける。サンプルコードでは、200 OKが返ったときの条件の例。
function myFunction() {
let requests = [];
//フェッチするURLのリスト
let urls = [
'http://imneo.blog.shinobi.jp/',
'http://imneo.blog.shinobi.jp/abc', // 404が返るURL
'http://imneo.blog.shinobi.jp/macbook/'
];
// リクエストパラメータを生成
for (let i = 0; i < urls.length; i++) {
let param = {
url: urls[i],
method: 'get',
followRedirects: true,
muteHttpExceptions: true // 4xx、5xxエラーでも例外処理を発生させない
};
requests.push(param);
}
// フェッチ
let responses = UrlFetchApp.fetchAll(requests);
for (let i = 0; i < responses.length; i++) {
if (responses[i].getResponseCode() === 200) { //HTTPステータスを取得
//ステータス200 OKのときの処理
}
}
}
PR
Category:パソコン |
Date:2021/11/13