3

我知道 Google 将请求上限限制为每天 2,500 次……但在 EARTH 上我无法发出这么多请求,而且我只是不断收到“OVER_QUERY_LIMIT”

$street_no = get_post_meta($prop->ID, 'street_no', true);
$street = get_post_meta($prop->ID, 'street', true);
$street_suffix = get_post_meta($prop->ID, 'street_suffix', true);

$addr = urlencode( $street_no." ".$street." ".$street_suffix." BC Canada" );
$url = 'http://maps.googleapis.com/maps/api/geocode/json?address='.$addr.'&sensor=true';
$json_result = json_decode(file_get_contents($url));

if ( $json_result->status === "OVER_QUERY_LIMIT" ) :
    sleep(2);
    $json_result = json_decode(file_get_contents($url));
endif;

正如你所看到的,如果我得到OVER_QUERY_LIMIT我告诉脚本休眠 2 秒然后继续的状态......这似乎在今天早上的某个时候工作,但现在我什至无法获得一个地址地理编码.

我不知道此时该做什么......这让我的应用程序完全没用。

4

5 回答 5

5

也许您每秒发送的查询太多?

看看这个线程:

使用谷歌地图时 OVER_QUERY_LIMIT

于 2013-02-08T22:40:09.813 回答
4

配额在共享 IP 的所有用户之间共享,因此同一共享 IP 上的其他站点必须使用 Google 地理编码器。

有关详细信息,请参阅Google Maps API v2 组中的此线程

顺便说一句 - rackspace 是一个猜测......

一种解决方法是使用基于客户端的地理编码,但请验证您的使用是否符合使用条款。

Web 服务现在支持 key,另一种选择是在您的请求中使用 key 以便您获得自己的配额。

于 2013-02-08T23:19:06.820 回答
1

我的 heroku 托管 java 应用程序遇到了类似的问题。我解决它的方法是设置一个微型 EC2 实例并在其上安装 Dante 以作为代理服务器运行。然后我只需通过代理路由我的地理编码请求,并且每天可以发出完整的 2,000 个请求。显然,缓存结果以最小化 api 调用也是值得的。EC2 实例在第一年是免费的,之后仍然没有那么贵,您可以随时使用它,而不仅仅是 Dante。

我已经在此处详细说明了如何设置:使用 Heroku 的 Google 地理编码

于 2013-05-11T22:00:11.580 回答
0

我从 Heroku 上的服务器(托管在 Amazon EC2 上)调用地理编码 REST 接口时遇到同样的问题

如果我可以在请求中使用我的 Maps API 密钥并且他们跟踪每个 api 密钥的调用次数,则可以解决此问题。

我同意这是一个严重的问题......

Bing、MapQuest 和其他人有免费的地理编码 API——你(和我)应该看看那些。

于 2013-03-04T21:50:55.340 回答
0

您可以使用像 QuotaGuard 这样的托管代理服务,它会阻止来自共享 IP 的请求,这样您在使用 Rackspace/Heroku 等时就不会被 Google 阻止。

于 2013-09-25T11:15:11.260 回答