编程语言
首页 > 编程语言> > javascript – 缩短Google AppScripts中UrlFetch的执行时间

javascript – 缩短Google AppScripts中UrlFetch的执行时间

作者:互联网

我有一个包含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');
    }
  }
}

提前致谢!!

解决方法:

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

>使用urlList创建请求.
>使用fetchAll()从URL中检索值.
>创建用于放入电子表格的值.
>将创建的值设置为“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()的限制而发生错误,请告诉我.我想修改脚本.

参考:

> fetchAll()

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

标签:javascript,google-sheets,google-apps-script
来源: https://codeday.me/bug/20191003/1846429.html