Javascript 减少google AppScript中UrlFetch的执行时间
我有一个包含URL列表的电子表格。 我试图搜索URL是否包含特定类,根据响应,我将在它旁边的单元格中设置0或1。 我已经做了一个脚本,它确实做到了这一点,但我遇到了执行超时错误,所以我只想知道是否有任何方法可以减少它的执行时间 这是密码Javascript 减少google AppScript中UrlFetch的执行时间,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我有一个包含URL列表的电子表格。 我试图搜索URL是否包含特定类,根据响应,我将在它旁边的单元格中设置0或1。 我已经做了一个脚本,它确实做到了这一点,但我遇到了执行超时错误,所以我只想知道是否有任何方法可以减少它的执行时间 这是密码 函数ulrFetch(){ var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); var class=ss.getRange(1,5).getValue(); var lr
函数ulrFetch(){
var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var class=ss.getRange(1,5).getValue();
var lr=ss.getLastRow();
var urlist=ss.getRange(3,8,lr-1).getValues();
var length=urlist.length
对于(变量i=0;i-1){
ss.getRange(i+3,5).setValue('1');
}
否则{
ss.getRange(i+3,5).setValue('0');
}
}
}
这次修改怎么样?我认为fetchAll()可以使用720个请求。因此,我建议使用fetchAll()。此修改脚本的流程如下所示
urlist
创建请求- 如果由于fetchAll()的限制而发生错误,请告诉我。我想修改脚本
如果我误解了你的问题,很抱歉。我可以问你
var length=urlist.length
的length
的值吗?我认为在你的情况下,你可以使用。fetchAll()可以通过异步处理进行处理。但我也认为,当长度很大时,它可能无法使用它。@Tanaike感谢您的回复,URL列表的长度为720。谢谢您的回复。我发布了一个答案,因为我认为fetchAll()可以使用720个请求。您能确认一下吗?您好,谢谢您提供的答案似乎很有说服力,但我在这一行“var res=UrlFetchApp.fetchAll(requests);”@Ace Cool遇到了这个错误“无效参数:http://”。在这个修改后的脚本中,urlList
是包含URL的二维数组。无法使用URL时会发生此错误。那么,您可以提供您想要使用的示例URL吗?我确认,在我的环境中,当可以使用的URL用于请求时,它是有效的。完美!非常感谢您的时间和支持,我接受了您的回答。:)@我很高兴你的问题解决了。也谢谢你。
var urlList = ss.getRange(3, 8, lr-1).getValues();
var urlList = ss.getRange(3, 8, lr - 1 - 1).getValues();
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);