遇到谷歌地图API限流,但不明原因
我写了一个脚本,用来把地址发送给谷歌地图的API,然后获取经纬度(Lat和Lng)。但是,我在发送大约20个请求后,收到了错误信息,说我超过了谷歌的请求限制。请问我有没有什么地方没考虑到?
我非常感谢任何帮助。我对使用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 个回答
2
我发现大多数人(包括我自己)在使用谷歌地图API的时候,常常忽略了一个叫做“请求速率限制”的部分,这个和“每天的页面限制”是不同的。
所谓的“请求速率限制”是指每秒最多只能发出10个请求。
举个例子,如果你在一个页面上显示了20个静态地图,而用户的网络连接很快(可能就是你自己)……
那么这20个请求会在1秒钟内发出得比1秒还快……
这样一来,你就违反了他们的规则,他们就会阻止这些图片的显示。
这是我刚刚在这里那里阅读后得出的结论。
祝你好运!
8
每次调用 gmaps.address_to_latlng
时,都会向谷歌服务器发送一个请求,而你能发送的请求数量是有限的。
谷歌的文档中提到的 使用限制是:
使用谷歌地理编码API每天最多可以发送2500个地理位置请求。[...] 此外,我们还会限制请求的频率,以防止滥用服务。
还有关于 G_GEO_TOO_MANY_QUERIES
的说明:
给定的密钥在24小时内超过了请求限制,或者在短时间内发送了太多请求。如果你在并行发送多个请求,或者在一个紧凑的循环中发送请求,建议在代码中使用定时器或暂停,以确保请求发送得不太快。
所以,按照他们的建议来做:
import time
# And then in the loop, pause:
time.sleep(1)
把“1”调整为合适的秒数,这样你就不会用完允许的请求数量。