如何绕过调用太多次错误?

问题描述 投票:-1回答:1

我正在尝试使用以下脚本来填充超过3000个单元格的邮政编码:

function geo2zip(a) {
  var response=Maps.newGeocoder()
 .reverseGeocode(lat(a),long(a));
 return response.results[0].formatted_address.split(',') 
  [2].trim().split(' ')[1];
   }
 function lat(pointa) {
 var response = Maps.newGeocoder()
 .geocode(pointa);
  return response.results[0].geometry.location.lat
  }
  function long(pointa) {
  var response = Maps.newGeocoder()
 .geocode(pointa);
  return response.results[0].geometry.location.lng
   }

显然,在大约5个单元格之后,我收到的错误是服务被调用了太多次

简单地说,我如何支付(或添加代码)才能运行我需要的单元格的脚本?

google-maps google-apps-script google-sheets upgrade account
1个回答
0
投票

我不确定延迟。你可能必须玩它。而且我也不确定你是否会被允许在一天内完成3000次操作。但是暂时不考虑配额,我不建议,你可以做这样的事情。

看起来这个服务是基于付费的,所以我的猜测是它将花费你一些东西。阅读底部有关API使用和结算的链接。

function loopGeocode(start) {
  var start=start || 0;
  var ss=SpreadsheetApp.getActive();
  var sh1=ss.getSheetByName('Points');
  var sh2=ss.getSheetByName('Locations');
  var pt=sh1.getRange(1, 1,sh.getLastRow(),1).getValues();
  for(var i=start;i<pt.length;i++) {
    sh2.appendRow([i+1,pt[i][0],geo2zip(pt[i][0])])
    Utilities.sleep(8000);//I have no idea what this delay should be
  }
  return i+1;
}

function geo2zip(a) {
  var response=Maps.newGeocoder().reverseGeocode(lat(a),long(a));
  return response.results[0].formatted_address.split(',')[2].trim().split(' ')[1];
}
function lat(pointa) {
  var response = Maps.newGeocoder().geocode(pointa);
  return response.results[0].geometry.location.lat
}
function long(pointa) {
  var response = Maps.newGeocoder().geocode(pointa);
  return response.results[0].geometry.location.lng
}

我将它从JavaScript计时器运行,并尝试每6分钟运行一次。我不知道withSuccessHandler()是否会等待那么长时间,因此您可能需要存储返回值,该值告诉循环每次开始计数的位置。您可以存储在PropertiesService中。大约需要15个小时。

Geocoding API Use and Billing

Geocoding API Getting Started

Javascript Timer Example

在阅读了一些链接之后,我认为每秒50个查询是可以接受的,因此解决方案可能与在样本之间添加时间无关。这可能是设置结算帐户并按需付费的问题。

Create, Modify, or Close Your Billing Account

© www.soinside.com 2019 - 2024. All rights reserved.