繁体   English   中英

检测 Google Maps API 配额限制

[英]Detect Google Maps API quota limit

如果达到 Google Maps Javascript API V3 的配额,有人知道通过 Javascript 或 HTTP 请求进行测试的方法吗? 获取为用户显示的错误消息就足够了。

我们启用了计费并为 Google Maps Javascript API v3 设置了大约 100,000 个配额,但有时我们会破坏它,有时甚至没有意识到。 现在我们喜欢使用 nagios 之类的工具(可能通过使用 phantomjs)来监控我们的 api 访问以获得即时警告。 但是我找不到任何关于如何测试的信息,如果我们的配额已超过。

更新2

在这里找到了一个类似的请求:如何检测 Google 地图中已达到每天 25000 个请求的限制?

但是只有对 API-Console 的引用。 如果有人设法使用 Javascript 回退到静态地图,我可以针对我的情况修改脚本。

更新

这是谷歌地图的本地化配额错误消息的示例,它为用户而不是地图显示。 如果发生这样的事情,我宁愿删除地图容器:

本地化配额消息示例

我假设您想知道是否超出了 Google Maps API Web 服务请求限制。 这是官方文档所说的:

超出使用限制

如果超出使用限制,您将收到 OVER_QUERY_LIMIT 状态代码作为响应。

这意味着 Web 服务将停止提供正常响应并切换到仅返回状态代码 OVER_QUERY_LIMIT,直到再次允许更多使用。 这可能发生:

  • 在几秒钟内,如果由于您的应用程序每秒发送的请求过多而收到错误。
  • 在接下来的 24 小时内的某个时间,如果由于您的应用程序每天发送的请求过多而收到错误。 一天中的时间
    服务的每日配额重置因客户和每个 API 而异,并且会随着时间的推移而变化。

收到状态代码为 OVER_QUERY_LIMIT 的响应后,您的应用程序应确定超出了哪个使用限制。 这可以通过暂停 2 秒并重新发送相同的请求来完成。 如果状态代码仍为 OVER_QUERY_LIMIT,则您的应用程序每天发送的请求过多。 否则,您的应用程序每秒发送的请求过多。

和一个代码示例:

url = "MAPS_API_WEBSERVICE_URL"
attempts = 0
success = False

while success != True and attempts < 3:
  raw_result = urllib.urlopen(url).read()
  attempts += 1
  # The GetStatus function parses the answer and returns the status code
  # This function is out of the scope of this example (you can use a SDK).
  status = GetStatus(raw_result)
  if status == "OVER_QUERY_LIMIT":
    time.sleep(2)
    # retry
    continue
  success = True

if attempts == 3:
  # send an alert as this means that the daily limit has been reached
  print "Daily limit has been reached"

引自谷歌地图文档: https : //developers.google.com/maps/documentation/business/articles/usage_limits#limitexceeded

TLDR:发出请求,如果收到 OVER_QUERY_LIMIT 响应,请在两秒钟后重试。 如果响应仍然相同,则您已达到每日限制。

我根据观察到 Google 错误消息包含一个具有dismissButton类属性的元素提出了一个解决方案。 使用 jQuery,它就像

var quota_exceeded = false;
$(document).ready( function() {
    setTimeout(check_quota, 1000);
    setTimeout(check_quota, 3000);
    setTimeout(check_quota, 10000);
});
function check_quota() {
    if (quota_exceeded) return;
    if (typeof($("button.dismissButton")[0]) === "undefined") return;
    quota_exceeded = true;
    // you can even hijack the box and add to Google's message
    $("button.dismissButton").parents("td").html(
        "We have exceeded our quota!!!!!<p>" +
        "<img src='https://c1.staticflickr.com/8/7163/6852688771_c90c9887c3.jpg'>" +
        "<p><button class='dismissButton'>OK</button>");
    $("button.dismissButton").click( function() {
        $("button.dismissButton").parentsUntil("div").parent().hide();
    });
}

确认工作正常,并且是超过Google配额时捕获错误的绝佳方法。

TfLJamCams.net上的示例。 配额用完后,请在英国时间21:00左右进行检查。

谢谢暴民

确认,此JavaScript可以正常运行,并允许您将文本添加到Google警告弹出窗口。

我已经成功添加了指向备用OSM映射的链接,一旦我的配额用完,访问者就可以使用该映射。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM