UrlFetchAppの並列処理でタイムアウト克服|Google App Script

UrlFetchApp並列処理|GASタイムアウト克服Google App Script

Google App Script(GAS)で、複数のURLリストからHTTPリスエストする方法はUrlFetchApp.fetch()を使って、for構文のループ処理で順番にresponseを取得する方法があります。

でも、この方法だと処理時間が掛かるし、件数によってはGASのタイムアップでエラーになることもある。

そこで、並列処理を行う方法に変更しました。

 

やること

スプレッドシートにあるURLリストを読み込み、UrlFetchApp.fetch()を使ってHTTPリクエストし、レスポンスを受け取る。

 

順次処理の場合

まずはfor構文でロープ処理して、順次HTTPリクエストを行う方法です。

 

function gethttpresponse1() {
  var spreadsheet = SpreadsheetApp. getActiveSpreadsheet().getSheetByName('シート1');

  // getLastRow()でデータがセットされている最終行を取得する
  var lastRow = spreadsheet.getLastRow();

  // 配列urlsを宣言
  var urls = [];

  // 配列responseを宣言
  var responses = [];

  //配列urlsにURLリストを読み込む
  for(var j=1; j<=lastRow; j++){

    // スプレッドシートの A列にURLが記載されている
    // 1行目から順にをURL取得し変数urlにセットする
    urls.push(spreadsheet.getRange(j, 1).getValue());
  }

  // 変数urlにセットされているURL対してHTTPリスエスト
  // 配列responsesにレスポンスを格納する
  for(var i=1; i<=lastRow; i++){
    responses.push(UrlFetchApp.fetch(urls));
  }

  // 取得結果responseをログ出力
  Logger.log(responses);
}

 

この方法の場合、件数が少ない場合は気にならないのですが、件数に比例して処理時間が長くなってしまいます。

GASは処理時間が6分を超えるとタイムアウトになって、処理が中断されてしまいます。

 

そこで並列処理する方法に変更しましょう。

 

並列処理に変更

修正したのは、下記の箇所です。

var responses = UrlFetchApp.fetchAll(urls);

これにより、ループ処理すること無く1回の処理でHTTPリクエストを行うことができます。

 

function gethttpresponse2() {
  var spreadsheet = SpreadsheetApp. getActiveSpreadsheet().getSheetByName('シート6');

  // getLastRow()でデータがセットされている最終行を取得する
  var lastRow = spreadsheet.getLastRow();

  // 配列urlsを宣言
  var urls = [];

  // 配列responseを宣言
  var responses = [];

  //配列urlsにURLリストを読み込む
  for(var j=1; j<=lastRow; j++){
    // スプレッドシートの A列にURLが記載されている
    // 1行目から順にをURL取得し変数urlにセットする
    urls.push(spreadsheet.getRange(j, 1).getValue());
  }

  // 変数urlにセットされているURL対してHTTPリスエスト
  // 配列responsesにレスポンスを格納する
  var responses = UrlFetchApp.fetchAll(urls);

  // 取得結果responseをログ出力
  Logger.log(responses);
}

 

参考にしたサイト

UrlFetchApp.fetchの応答3種 タイムアウトがつらい – Qiita

Google Apps Script試行錯誤 Blog: UrlFetchApp.fetchAllを使って複数のfetchを同時にやって実行時間の短縮を試みる (pre-practice.net)

【メルマガ配信中】

周りに流され仕事だらけのあなたが、仕事で成果を出しながら、自分と家族との時間を取り戻す!そんな毎日に変えていく気付きや考え方などをお伝えしています。

メルマガ登録フォーム


メールアドレス

※iCloudメール、使い捨てメール、及び企業アカウントメールは、迷惑メールフィルターでエラーになる確率が高くなります。

GmailやYahooメール等のアドレス、インターネットサービスプロバイダが発行しているメールアドレスでのご登録をおすすめします。


【人生とは時間の使い方】

ミッション:自分が楽しいと思えるコースを、いつでも何度でも走り始められる。誰もが自立して生きていける社会の実現を目指して。

バリュー:無駄な仕事や突然の問題発生、幸せの実現を邪魔する不安や悩みを解決・解消していく。

■吉乃 建志(よしのケンジ)プロフィール■

妻と娘と三人家族/システムエンジニア/40歳過ぎでフルマラソンに挑戦し完走/日本全国巡ることをライフワークに決めた「旅」と「食」を楽しむスキマ旅ブラリスト/本業も副業も成果を出しプライベートも充実できるハイブリッドワーカー

┏ ───────────────── ┓

  吉乃 建志(よしのケンジ)

  やっちゃえオッサン

  Powered by HYBRID WORKER

  <Mail>info@yoshinokenji.com

  <Blog>https://yoshinokenji.com

┗ ───────────────── ┛

コメント