如何修复“一天内调用服务次数过多:urlfetch”错误?

6
我在我的Google表格中遇到了以下错误:

我在我的Google表格中遇到了以下错误:

Service invoked too many times for one day: urlfetch

我知道我并没有进行100k次调用,但是我的表格中有很多自定义函数。我尝试创建一个新的表格,并将脚本复制/粘贴到其中,但仍然出现相同的错误。我切换了账户,创建了一个新的表格,添加了代码,但仍然出现错误。
这是否只是因为我在同一台电脑上?Google 是否足够聪明,能意识到我是同一个人在尝试操作呢?我非常怀疑这一点,所以我想知道为什么会出现这个错误,即使我切换了帐户并创建了一个新的表格。
除此之外,有没有办法确保我将来不会超过限制?这个错误至少让我在工作中耽误了一天。我计划编写一个脚本,将导入的HTML复制/粘贴为值到另一个表格中,但在我成功之前,我需要一个临时解决办法。
样例代码:
function tbaTeamsAtEvent(eventcode){
  return ImportJSON("https://www.thebluealliance.com/api/v3/event/" + eventcode + "/teams?X-TBA-Auth-Key=" + auth_key);
}

function ImportJSONForTeamEvents(url, query, options){
  var includeFunc = includeXPath_;
  var transformFunc = defaultTransform_;
  var jsondata = UrlFetchApp.fetch(url);
  var object   = JSON.parse(jsondata.getContentText());
  var newObject = [];
  for(var i = 0; i < object.length; i++){
    var teamObject = {};
    teamObject.playoff = object[i].alliances
    
    newObject.push(teamObject);
  }
  
  return parseJSONObject_(object, query, "", includeFunc, transformFunc);
}

这是一个用于特定功能的“代码集”。我多次调用了两个不同的函数。其中一个函数大约有600个,另一个函数只有4个。如果所有函数同时运行,那么调用次数仅会略超过一千次。

需要注意的是,我的驱动器中还有另一个工作表,每小时自动更新一次,使用UrlFetch进行操作。但我认为这不会影响到此处的操作,因为它的拉取频率非常低。


那个数字只是一天的总数。但是,如果在任何时间内超过每秒100000/86400次操作的速率,则仍然可能触发错误。我其实不确定这一点,但是通过使用这种方法,我已经避免了这样的错误很长一段时间。所以我猜想这对你也可能有用。但是你可能需要等一段时间再试一次。 - Cooper
1
@Cooper 什么算作操作?我有一个函数,它读取和格式化API,大约有200行代码。我在我的表格中有许多(约600个)这样的函数,每个函数都算作一个操作,还是脚本经过的每个过程都算作一个操作?根据我的理解,似乎是脚本中的每个单独操作算作一个操作。 - kaitlynmm569
你的脚本里有600个UrlFetches吗?如果是的话,我认为那可能是问题所在。如果你能控制每秒只进行2次,而不会超时,那可能是可行的方法。再次强调,我没有内部信息,我真的不太清楚。这是我用来避免错误的方法。我猜每秒两次可能会让你超时,所以也许你需要重新考虑你的功能。 - Cooper
你能提供一些能够重现问题的代码吗?正如Cooper所说,这个速率可能会因每秒钟的调用次数而超过。然而,这种情况非常不可能发生。 - ZektorH
@Cooper,抱歉让你误解了,我没有600个UrlFetches。每个函数只有2个UrlFetches。我会编辑原始帖子以反映一些代码。 - kaitlynmm569
显示剩余2条评论
1个回答

1
我遇到了类似的问题,即使我在函数中仅调用了两个获取数据的方法,并且每行数据都有一个函数。随着我的数据变化,每次重新计算都会调用这些函数,导致数量呈指数级增长,很快就达到了最大值。
我的解决方案是使用缓存服务来临时存储获取数据的结果,即使只有几秒钟的时间,以便由同一重新计算事件触发的所有单元格仅使用单个调用进行传播。这个简单的添加使我每次访问表格时节省了成千上万次的获取数据调用。
参考文献: https://developers.google.com/apps-script/reference/cache?hl=en

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接