Google 使用新的 API 密钥放置库 OVER_QUERY_LIMIT
Google Places Library OVER_QUERY_LIMIT with new API key
我在 javascript 应用程序中使用 Places 库。当我使用 service.nearbySearch()
方法查找附近的地方时,它工作正常。然后,当我发出 service.getDetails()
请求时,我得到每个请求的 OVER_QUERY_LIMIT
状态。在我的开发者控制台中,我可以跟踪对 Google 地图 JavaScript API v3 发出的每个请求,但我没有从 API.[=17= 的位置获得任何结果]
下面是部分代码:
// How I load the library
<script src="https://maps.googleapis.com/maps/api/js?libraries=places&key=API_KEY"></script>
// My places request
var places = new google.maps.places.PlacesService(map);
var location = new google.maps.LatLng(lat, lng);
var request = {
location: location,
radius: radius,
types: [type]
};
places.nearbySearch(request, function(results, status, pagination) {
if (status === google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
// Get the details for each place
var detailsRequest = { placeId: results[i].id }
places.getDetails(detailsRequest, function(place, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
console.log('PLACE', place)
} else {
console.log('STATUS', status)
}
})
};
}
有什么想法吗?
答案是我请求 .getDetails()
方法的速度太快了。 Docs.
我正在遍历几十个位置并且请求太多太快了。通常,在 OVER_QUERY_LIMIT
错误之前,我只会得到 60 多个结果中的前 10 个或 12 个。
我将对 .getDetails()
的调用移到了标记的点击事件中。这样一次只发送一个请求。
也运行陷入同样的问题。好像你有一个 9 或 10 个请求的池,你可以用完,然后每 1 秒获得一个额外请求的津贴。
有人说 API 的服务器端版本允许每秒 50 个请求,所以我猜 Google 试图防止客户端实例过载,这是有道理的。
对我来说,在 getDetails result/s 进来时让 UI 显示微调器就足够了。所以我只是在前 9 或 10 个之后限制了请求,如下所示:
nearbySearchCallback: function (places, status) {
var that = this;
if (status === window.google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < places.length; i++) {
// You seem to have a pool of 9 or 10 requests to exhaust,
// then you get another request every second therein.
(function (i) {
setTimeout(function () {
service.getDetails({ placeId: places[i].place_id }, that.getDetailsCallback);
}, i < 9 ? 0 : 1000 * i);
})(i);
}
}
},
getDetailsCallback: function (place, status) { /* ... */ }
我在 javascript 应用程序中使用 Places 库。当我使用 service.nearbySearch()
方法查找附近的地方时,它工作正常。然后,当我发出 service.getDetails()
请求时,我得到每个请求的 OVER_QUERY_LIMIT
状态。在我的开发者控制台中,我可以跟踪对 Google 地图 JavaScript API v3 发出的每个请求,但我没有从 API.[=17= 的位置获得任何结果]
下面是部分代码:
// How I load the library
<script src="https://maps.googleapis.com/maps/api/js?libraries=places&key=API_KEY"></script>
// My places request
var places = new google.maps.places.PlacesService(map);
var location = new google.maps.LatLng(lat, lng);
var request = {
location: location,
radius: radius,
types: [type]
};
places.nearbySearch(request, function(results, status, pagination) {
if (status === google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
// Get the details for each place
var detailsRequest = { placeId: results[i].id }
places.getDetails(detailsRequest, function(place, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
console.log('PLACE', place)
} else {
console.log('STATUS', status)
}
})
};
}
有什么想法吗?
答案是我请求 .getDetails()
方法的速度太快了。 Docs.
我正在遍历几十个位置并且请求太多太快了。通常,在 OVER_QUERY_LIMIT
错误之前,我只会得到 60 多个结果中的前 10 个或 12 个。
我将对 .getDetails()
的调用移到了标记的点击事件中。这样一次只发送一个请求。
也运行陷入同样的问题。好像你有一个 9 或 10 个请求的池,你可以用完,然后每 1 秒获得一个额外请求的津贴。
有人说 API 的服务器端版本允许每秒 50 个请求,所以我猜 Google 试图防止客户端实例过载,这是有道理的。
对我来说,在 getDetails result/s 进来时让 UI 显示微调器就足够了。所以我只是在前 9 或 10 个之后限制了请求,如下所示:
nearbySearchCallback: function (places, status) {
var that = this;
if (status === window.google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < places.length; i++) {
// You seem to have a pool of 9 or 10 requests to exhaust,
// then you get another request every second therein.
(function (i) {
setTimeout(function () {
service.getDetails({ placeId: places[i].place_id }, that.getDetailsCallback);
}, i < 9 ? 0 : 1000 * i);
})(i);
}
}
},
getDetailsCallback: function (place, status) { /* ... */ }