在脚本编辑器中设置Maps API密钥

Pau*_*rat 5 google-maps google-apps-script custom-function

据我了解,为了跟踪我们的配额使用情况,我们需要在我们计划使用的服务上向Google App Service提供API密钥.

在我的例子中,我有一个带有Origin和Destination的电子表格以及一个自定义函数来计算它们之间的距离.

我遇到了通过调用来满足配额的问题.getDirections():

错误:服务调用太多次一天:路由.(行**).

代码示例:

 function getDirections_(origin, destination) {
  var directionFinder = Maps.newDirectionFinder();
  directionFinder.setOrigin(origin);
  directionFinder.setDestination(destination);
  var directions = directionFinder.getDirections();  
  return directions;
}
Run Code Online (Sandbox Code Playgroud)

所以我读到如果我将API密钥分配给我的项目,我应该能够看到使用情况以及我与免费配额的接近程度.

在脚本编辑器中,我确实启用了"资源"菜单/"高级Google服务"下的所有API.然后我去了Google Developers Console,在那里我没有看到任何关于我的自定义函数调用Google Maps API或任何API使用次数的记录.

从逻辑上讲,我认为在我的脚本中我需要设置我的谷歌API密钥,以便我的脚本开始以我的用户名调用API并计算我使用某些API的时间.我想我现在正在使用谷歌地图API作为匿名,因为整个公司被分配了相同的IP,所以我们用尽许多数字来调用这个功能.

如果你知道一种方法将我的简单电子表格功能连接到我拥有的公共API访问密钥,请回复底线.

谢谢你,保罗

小智 6

我也渴望在很长一段时间内找到这个答案,我很高兴地说我找到了答案.看起来Google可能会在2015年10月14日左右根据此页面更新日期提供此功能.

您可以利用UrlFetchApp添加API密钥.我上面发布的链接应该有助于获取该密钥.

function directionsAPI(origin, destination) {
 var Your_API_KEY = "Put Your API Key Here";
 var serviceUrl = "https://maps.googleapis.com/maps/api/directions/json?origin="+origin+"&destination="+destination+
"&mode="+Maps.DirectionFinder.Mode.DRIVING+"&alternatives="+Boolean(1)+"&key="+Your_API_KEY;

 var options={
  muteHttpExceptions:true,
  contentType: "application/json",
 };

 var response=UrlFetchApp.fetch(serviceUrl, options);
  if(response.getResponseCode() == 200) {
   var directions = JSON.parse(response.getContentText());
    if (directions !== null){
     return directions;
     }
    }
  return false;
 }
Run Code Online (Sandbox Code Playgroud)

因此,遍历代码......首先输入您的API密钥.然后在var serviceUrl中选择您的参数.我已经抛出了额外的参数(模式和替代方案)来展示如何添加它们.如果您不想要它们,请将它们删除.

使用UrlFetch,您可以添加选项.我已经使用了muteHttpExceptions,因此如果响应代码指示失败,则fetch不会抛出异常.这样我们可以为函数选择一个返回类型,而不是抛出异常.我正在使用JSON作为内容类型,因此我们可以使用相同的格式来发送和检索请求.响应代码200表示成功,因此方向将解析并像getDirections()将返回的对象一样行动.如果UrlFetch不成功(不同的响应代码)或者对象为null,则该函数将返回false.

当您查看Google Maps Directions API时,您将能够在开发者控制台中实时查看查询.确保已启用结算,超出配额后将向您收取费用.

  • 好东西JP.我建议的另一件事是将您的API密钥放在脚本属性中.这样,如果您将代码置于源代码管理之下,则不会冒险暴露它们.您可以通过转到**文件**>**项目属性**,并在"脚本属性"选项卡中添加键值对来完成此操作.然后在您的代码中,使用`PropertiesService.getScriptProperties().getProperty(keyName)`来访问密钥. (2认同)