调用Foursquare API explore venues报KeyError:'groups'如何解决
Foursquare API调用触发KeyError: 'groups'修复方案
报错场景
执行如下代码调用Foursquare API explore venues接口时,固定触发KeyError : 'groups'报错:
results = requests.get(url).json()['response']['groups'][0]['items']
已排除影响因素:
- 账号API调用额度未耗尽
- 更换全新Client ID、Client Secret后问题仍复现
根因
该报错和账号权限、密钥、调用额度无关,核心原因是请求不符合接口规范,接口未返回预期的带groups节点的正常业务响应,直接链式按键取值就会触发键不存在的错误。绝大多数情况是以下两类问题:
- 使用v2版本接口时漏传必填的版本号参数
v,接口直接返回错误结构 - 误调用了v3版本接口,v3版本接口返回结构不存在
groups节点,沿用v2的解析逻辑不兼容
修复步骤
- 先打印完整响应定位具体问题,不要直接写链式取值逻辑:
正常情况下如果是参数错误,返回内容里会带resp = requests.get(url).json() print(resp)meta字段标注具体错误码和错误信息,对照错误信息调整参数即可。 - 若使用v2版本explore接口,补全必填参数:
v2接口必须携带4个核心必填参数,缺一个都不会返回正常业务结构:client_id:你的客户端IDclient_secret:你的客户端密钥ll:查询点位的经纬度,格式为纬度,经度v:API版本号,格式为YYYYMMDD,填近期日期即可,比如20240101
可参考如下可运行的调用示例:
import requests base_url = "https://api.foursquare.com/v2/venues/explore" request_params = { "client_id": "替换为你的Client ID", "client_secret": "替换为你的Client Secret", "ll": "31.2304,121.4737", "v": "20240101", "radius": 1500, "limit": 20 } resp = requests.get(base_url, params=request_params).json() # 增加节点存在性判断,避免偶发异常直接抛错 if "response" in resp and "groups" in resp["response"] and len(resp["response"]["groups"]) > 0: results = resp['response']['groups'][0]['items'] else: print("接口返回异常:", resp) - 若使用v3版本接口,调整解析逻辑:
v3版本接口鉴权需要把API Key放在请求头中,不需要传client_id和client_secret,返回的场馆列表直接存在results字段下,没有groups节点,对应解析逻辑要调整为:headers = { "Accept": "application/json", "Authorization": "替换为你的v3版API Key" } params = { "ll": "31.2304,121.4737", "radius": 1500, "limit": 20 } resp = requests.get("https://api.foursquare.com/v3/places/search", headers=headers, params=params).json() results = resp["results"]
内容的提问来源于stack exchange,提问作者Ananya Nayak
相关产品推荐
相关产品推荐

