【问题标题】:How to use an array to work around google scripts "service invoked too many times for one day" error如何使用数组来解决谷歌脚本“一天内调用了太多次服务”错误
【发布时间】:2019-03-17 17:45:49
【问题描述】:

我编写了一个简单的脚本来获取两个位置之间的距离,每个位置在 GoogleSheets 的不同单元格中(如下)。我的工作表在顶行中有一组 65 个位置,在第一列中列出了第二组 6000 个位置。我想找到顶行中每个位置与第一列中每个位置之间的距离。

鉴于我的数据集的大小,我遇到了“一天内调用了太多次服务:路由”错误消息。我发现this post 建议可以创建一个数组来一次对整个电子表格执行计算,而不是逐个单元格地执行计算。这是否适合我当前的问题?如果是这样,我将如何编写脚本?这是我当前的代码:

function GOOGLEMAPS(start_address,end_address) {

    Utilities.sleep(1000)


  var mapObj = Maps.newDirectionFinder();
  mapObj.setOrigin(start_address);
  mapObj.setDestination(end_address);
  var directions = mapObj.getDirections();

 var meters = directions["routes"][0]["legs"][0]["distance"]["value"];
 var distance = meters * 0.000621371

 //Logger.log(distance)

 return distance;

}

【问题讨论】:

  • 查询限制是查询限制。 6000 x 65 将被视为滥用,除非您将其传播到很长一段时间(没有使用 Google API 进行批量地理编码的规定)。

标签: arrays google-maps google-apps-script google-sheets


【解决方案1】:

如果您希望克服 Google Apps 脚本设定的每日限制,您应该使用 Google Maps Premium 计划凭据初始化地图。这意味着您应该联系 Google 并购买 Google Maps Platform Premium 计划许可,以获得额外的配额配额。

为此有一个Maps.setAuthentication(clientId, signingKey); 方法。

允许使用外部建立的 Maps API for Business 帐户,以利用额外的配额配额。您的客户端 ID 和签名密钥可以从 Google Enterprise Support Portal 获得。将这些值设置为 null 以返回使用默认配额限额。

来源:https://developers.google.com/apps-script/reference/maps/maps#setAuthentication(String,String)

我希望这个答案能澄清你的疑问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    相关资源
    最近更新 更多