检测 Google Maps API 配额限制

问题描述 投票:0回答:3

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

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

更新2

在这里找到类似的请求:How to detect that the 25000 request per day has been reached in Google Maps?

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

更新

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

Example of localized quota message

javascript google-maps google-maps-api-3
3个回答
5
投票

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

超出使用限制

如果您超出使用限制,您将获得 OVER_QUERY_LIMIT 状态 代码作为回应。

这意味着网络服务将停止提供正常响应 并切换到仅返回状态代码 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 响应,请在两秒后重试。如果响应仍然相同,则您已达到每日限额。


1
投票

我基于对 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();
    });
}

0
投票

对于 Google Javascript 地图,我使用以下代码;

var googleMapTryCount = 0;
var googleMapCheckInterval = setInterval(function () {
    googleMapTryCount++;
    if($(".dismissButton:visible").length == 1){
        gm_authFailure();
        clearInterval(googleMapCheckInterval);
    }

    if(googleMapTryCount >= 10) { 
        clearInterval(googleMapCheckInterval); 
    }
}, 1000);

function gm_authFailure(){
    console.log("gm_authFailure");
    //do something
}
© www.soinside.com 2019 - 2024. All rights reserved.