如何绕过被调用的次数过多错误?

时间:2019-04-26 18:04:57

标签: google-maps google-apps-script google-sheets upgrade account

我正在尝试使用以下脚本填充超过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个单元格之后,我收到错误消息,表明该服务已被调用太多次

简而言之,我如何支付(或添加到代码中)以能够为所需的单元格运行脚本?

1 个答案:

答案 0 :(得分: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