我编写了一个脚本,用于向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
答案 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并阻止图像显示。
这是我刚刚在这里和那里阅读后的结论
祝你好运