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

Kev*_*vin 7 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)
Run Code Online (Sandbox Code Playgroud)

我的错误信息如下.

    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
Run Code Online (Sandbox Code Playgroud)

Pet*_*rin 8

每次gmaps.address_to_latlng通话都会向Google服务器发送请求,您只能拨打有限数量的请求.

Google关于使用限制的文档:

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

以及关于G_GEO_TOO_MANY_QUERIES 以下方面的文档:

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

那么,做他们告诉你的事情:

import time

# And then in the loop, pause:
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

将"1"调整到适当的秒数,这样就不会耗尽允许的请求.

  • 我认为每秒还有10个请求的限制,这可能是这里遇到的限制. (4认同)
  • 每日上限2500的限制是每35秒一次. (4认同)