我使用地理编码API通过Python中的“地理编码器”模块处理地址列表。就在几周前,我能够成功完成此操作,但是今天,该API在经过2500次调用后就停止了响应。我没有收到任何错误响应,如果重新启动该过程,则可以再获得2500个响应,但此后再也没有响应。有谁知道为什么会这样?上限为2500的唯一参考是以前定价模式下的每日免费通话限额。
edit:有趣的是,这个问题似乎与我对Geocoder模块的使用无关。当我自己滚动时,我不会遇到相同的问题。
使用地址解析器的功能:
def get_data(query):
result = geocoder.google(query, key=apikey)
return {'formatted_address':result.address,
'lat':result.lat,
'long':result.lng}
仅使用请求的功能:
def get_data(query):
try:
api_response = requests.get('https://maps.googleapis.com/maps/api/geocode/json?address='+query+'&key='+apikey)
read_response = api_response.json()
address = read_response['results'][0]['formatted_address']
lat = read_response['results'][0]['geometry']['location']['lat']
lng = read_response['results'][0]['geometry']['location']['lng']
return {'formatted_address':address, 'lat':lat, 'lng':lng}
except:
return None
值得一提的是,自上次成功运行以来,我一直在新计算机上,并且自从切换以来,我遇到了一些间歇性的公司防火墙问题。我觉得问题似乎很奇怪,我想我肯定会遇到API限制。我想我只是将问题记录在地址解析器的git上,然后继续。
答案 0 :(得分:0)
答案 1 :(得分:0)
您需要传递参数
rate_limit = False
在您的查询中。因此,您上面的查询应该是
result = geocoder.google(query, key=apikey, rate_limit=False)
注意:之所以可行,是因为默认情况下,“ google.py”模块会调用装饰器
@ratelim.greedy(2500, 60 * 60 * 24) # Line 271 in google.py
因此,另一种选择是在源代码中更改该值。