javascript 检测GoogleMapAPI配额限制

ss2ws0br  于 2023-03-11  发布在  Java
关注(0)|答案(3)|浏览(109)

有没有人知道一种方法来测试通过Javascript或HTTP请求,如果配额的谷歌MapJavascript API V3达到?获得错误消息,这是显示给用户,将是足够的。
我们启用了计费功能,并为Google Maps Javascript API v3设定了大约100,000的配额,但有时我们会打破配额,有时甚至没有意识到这一点。现在我们喜欢用nagios这样的工具(可能是使用phantomjs)来监控我们的API访问,以获得即时警告。但我找不到任何关于如何测试配额是否超过的信息。

更新2

类似的请求可在此处找到:How to detect that the 25000 request per day limit has been reached in Google Maps?
但是这里只有一个对API-Console的引用,如果有人设法使用Javascript回退到静态Map,我可以根据我的情况修改脚本。

更新

下面是一个google maps的本地化配额错误消息的例子,它显示给用户而不是一个Map。如果发生这样的事情,我宁愿删除Map容器:

pkwftd7m

pkwftd7m1#

我假设你想知道你是否已经超过了Google Maps API Web Services的请求限制。下面是官方文档的说明:

超出使用限制

如果超出使用限制,您将收到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"

引用自GoogleMap文档:https://developers.google.com/maps/documentation/business/articles/usage_limits#limitexceeded
TLDR:发出请求,如果你得到OVER_QUERY_LIMIT响应,两秒后再试一次。如果响应还是一样,你已经达到了每日限制。

nfeuvbwi

nfeuvbwi2#

我根据Google错误消息包含一个具有dismissButton class属性的元素的观察结果提出了一个解决方案。

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();
    });
}
jtjikinw

jtjikinw3#

对于谷歌JavascriptMap,我使用下面的代码;

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
}

相关问题