减少Google AppScripts中UrlFetch的执行时间

编程入门 行业动态 更新时间:2024-10-15 02:29:41
本文介绍了减少Google AppScripts中UrlFetch的执行时间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

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

I am having a spreadsheet which contains a list of URLs. I am trying to search if an URL contains a particular class or not and based on response I will set 0 or 1 in the cell next to it. I have made a script and it does the purpose but I'm experiencing execution timeout error so just want to is there any way I can reduce it's execution time.

这是代码

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().修改后的脚本的流程如下.

How about this modification? I thought that 720 requests might be able to be used by fetchAll(). So I would like to propose to use fetchAll(). The flow of this modified script is as follows.

  • 使用urlList创建请求.
  • 使用fetchAll()从URL中检索值.
  • 创建用于放入电子表格的值.
  • 将创建的值放入"E3:E".
  • Create requests using urlList.
  • Retrieve values from URL using fetchAll().
  • Create values for putting to Spreadsheet.
  • Put the created values to "E3:E".
  • 修改后的脚本:

    请进行如下修改.

    Modified script :

    Please modify as follows.

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

    到 :

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

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

    By this modification, the values from row 3 to last row can be retrieved.

    还有

    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()

      如果我误解了你的问题,对不起.

      If I misunderstand your question, I'm sorry.

    更多推荐

    减少Google AppScripts中UrlFetch的执行时间

    本文发布于:2023-11-30 16:14:48,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1650650.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:执行时间   Google   AppScripts   UrlFetch

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!