忍者ブログ

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


忍者ブログ [PR]