遇到谷歌地图API限流,但不明原因

7 投票
2 回答
9323 浏览
提问于 2025-04-17 03:37

我写了一个脚本,用来把地址发送给谷歌地图的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”调整为合适的秒数,这样你就不会用完允许的请求数量。

撰写回答