谷歌地图API的命中率限制,但不知道为什么

时间:2011-10-04 04:25:30

标签: python geocoding google-maps-api-2

我编写了一个脚本,用于向Google Maps的API发送地址,然后收回Lat和Lng。但是,我收到的错误消息是,我在20次左右的查询后超出了Google的速率限制。有什么我不考虑的吗?

我很感激任何帮助。我非常擅长使用API​​,所以更好地理解为什么我达到速率限制会非常有帮助。

从名为Location的csv文件中读取地址后,下面是我的相关代码。

    for row in locations:
        address = 'XXX, New Haven, CT'
        first = re.search('^(.*),',row[0])
        address = re.sub('XXX',first.group(), address)
        lat, lng = gmaps.address_to_latlng(address)

我的错误信息如下。

    Traceback (most recent call last):
    File "<input>", line 5, in <module>
    File "/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/googlemaps-1.
    0.2-py2.7.egg/googlemaps.py", line 310, in address_to_latlng
        return tuple(self.geocode(address)['Placemark'][0]['Point']['coordinates'][1
    ::-1])
      File "/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/googlemaps-1.
    0.2-py2.7.egg/googlemaps.py", line 262, in geocode
        raise GoogleMapsError(status_code, url, response)
    GoogleMapsError: Error 620: G_GEO_TOO_MANY_QUERIES

2 个答案:

答案 0 :(得分:8)

每个gmaps.address_to_latlng来电都会向Google服务器发送请求,而您只能拨打有限数量的请求。

Google usage limits上的文档:

  

使用Google地理编码API每天的查询限制为2,500个地理定位请求。 [...]此外,我们强制执行请求率限制以防止滥用服务。

docs on G_GEO_TOO_MANY_QUERIES

  

给定密钥在24小时内超过了请求限制,或者在很短的时间内提交了太多请求。如果您要并行或紧密循环发送多个请求,请使用计时器或暂停代码以确保不会过快地发送请求。

所以,做他们告诉你的事情:

import time

# And then in the loop, pause:
time.sleep(1)

将“1”调整到适当的秒数,这样就不会用完所允许的请求。

答案 1 :(得分:2)

我让我意识到,大多数人(像我一样)省略了谷歌地图api中关于“请求率限制”的部分,该部分与“每日限制页数”不同。

所以'请求率限制'是每秒10个请求。

所以基于这个,如果你显示一个包含20个静态地图的页面......并且最终用户有一个快速的互联网连接(也许你呢?)......

然后,那些对谷歌地图API的20个请求发生得比1秒钟更快......

因此,你打破他们的ryle并阻止图像显示。

这是我刚刚在这里和那里阅读后的结论

祝你好运