javascript - 减少 google AppScripts 中 UrlFetch 的执行时间

标签 javascript google-apps-script google-sheets

我有一个包含 URL 列表的电子表格。 我正在尝试搜索 URL 是否包含特定类,并根据响应在其旁边的单元格中设置 0 或 1。 我制作了一个脚本,它可以达到目的,但我遇到了执行超时错误,所以我只想知道有什么方法可以减少它的执行时间。

这是代码

function ulrFetch(){
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var class = ss.getRange(1, 5).getValue();
  var lr = ss.getLastRow();
  var urlList = ss.getRange(3, 8, lr-1).getValues();
  var length = urlList.length
  for (var i = 0;i<length;i++){
    var url = urlList[i];
    var response = UrlFetchApp.fetch(url.toString());
    var result = response.getContentText();
    var index = result.indexOf(class);
    if (index > -1){
      
      ss.getRange(i+3, 5).setValue('1');
    }
    else {
      ss.getRange(i+3, 5).setValue('0');
    }
  }
}

提前致谢!!

最佳答案

这个修改怎么样?我认为 720 个请求可能可以被 fetchAll() 使用。所以我想建议使用fetchAll()。修改后的脚本流程如下。

  1. 使用 urlList 创建请求。
  2. 使用 fetchAll() 从 URL 中检索值。
  3. 创建要放入电子表格的值。
  4. 将创建的值放入“E3:E”。

修改后的脚本:

请修改如下。

从 :
var urlList = ss.getRange(3, 8, lr-1).getValues();
到 :
var urlList = ss.getRange(3, 8, lr - 1 - 1).getValues();

通过此修改,可以检索从第 3 行到最后一行的值。

从 :
for (var i = 0;i<length;i++){
  var url = urlList[i];
  var response = UrlFetchApp.fetch(url.toString());
  var result = response.getContentText();
  var index = result.indexOf(class);
  if (index > -1){

    ss.getRange(i+3, 5).setValue('1');
  }
  else {
    ss.getRange(i+3, 5).setValue('0');
  }
}
到 :
var requests = urlList.map(function(e) {return {url: e[0]}});
var res = UrlFetchApp.fetchAll(requests);
var values = res.map(function(e) {return e.getContentText().indexOf(class) > -1 ? ["1"] : ["0"]});
ss.getRange(3, 5, values.length, 1).setValues(values);

注意事项:

  • 如果由于 fetchAll() 的限制而发生错误,请告诉我。我想修改脚本。

引用:

如果我误解了你的问题,我很抱歉。

关于javascript - 减少 google AppScripts 中 UrlFetch 的执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51796140/

相关文章:

javascript - 变量声明是否提升到 if 范围 block 的顶部?

performance - Google Apps 脚本 Web 应用程序长轮询和同时执行限制

javascript - 使用 Google App 脚本将数据从一张纸复制到另一张纸时执行速度缓慢

php - 事件日历的数据库大小

javascript - 浏览器中在哪里定义了 keys() 函数?

javascript - 按背景颜色计算行数失败

javascript - 不正确的范围高度,是 1 但应该是 344 - 当尝试使用 .setValues() 将范围带到另一张纸时

sql-server - 将 Google App Script 连接到 Azure 上的 SQL Server (DBaaS)

javascript - chrome....onBeforeRequest...() URL 列表未按预期运行

javascript - 如何使用 JS 从 Google Drive 复制文件夹以在 Google Drive 中创建新文件夹