Python调用Foursquare API拼接URL时触发tuple与str拼接TypeError如何解决
问题原因
- 变量类型错误:你定义的
ll1到ll4都是元组类型,Python中逗号分隔的多个未加括号的默认值会被识别为元组,元组无法直接和字符串拼接,触发了对应TypeError。 - 接口参数使用错误:Foursquare的venues/search接口的
ll参数仅支持传入单个经纬度字符串,格式为纬度,经度,不支持直接传入多组经纬度。 - 语法错误:一是URL拼接时出现
+ll1+ +ll2的连续加号写法,不符合Python语法;二是make_request函数下的代码没有正确缩进,运行时会触发缩进错误。
解决方案
单点位查询
如果仅需要查询单个点位的周边场所,选择一组经纬度转为符合要求的字符串即可,修正后代码如下:
import requests import json payload = {} headers = {} # 经纬度格式为字符串:"纬度,经度" ll = "18.036442,42.492103" def make_request(payload, headers, ll): # 用f-string拼接URL更清晰不易出错 url = f"https://api.foursquare.com/v2/venues/search?client_id=VFFCWVM5UPLGNOS3IAQHQB5LLZBIRYZTGUYW40JHKSEMM0BR&client_secret=PCF41XEGDNVIZSZT5ULESYGZUTW02TVYKX5IOAEAAMF5GYP1&v=20210927&token=AEOYTHHSPVCSNNBFRT0RCH55KVRXJ1EH2XDSXPIWEWJEMEPG&ll={ll}&intent=browse&radius=10000" response = requests.request("GET", url, headers=headers, data=payload) return response.text data = make_request(payload, headers, ll) print(data)
多点位批量查询
如果需要查询4个点位的所有结果,可将经纬度存入列表循环发起请求:
import requests import json payload = {} headers = {} # 所有待查询的经纬度存为字符串列表 ll_list = [ "18.036442,42.492103", "18.036808,42.117917", "18.458814,42.485903", "18.453989,42.115408" ] def make_request(payload, headers, ll): url = f"https://api.foursquare.com/v2/venues/search?client_id=VFFCWVM5UPLGNOS3IAQHQB5LLZBIRYZTGUYW40JHKSEMM0BR&client_secret=PCF41XEGDNVIZSZT5ULESYGZUTW02TVYKX5IOAEAAMF5GYP1&v=20210927&token=AEOYTHHSPVCSNNBFRT0RCH55KVRXJ1EH2XDSXPIWEWJEMEPG&ll={ll}&intent=browse&radius=10000" response = requests.request("GET", url, headers=headers, data=payload) return response.text # 循环查询每个点位 for idx, ll in enumerate(ll_list): print(f"=====第{idx+1}个点位查询结果=====") res = make_request(payload, headers, ll) print(res)
内容的提问来源于stack exchange,提问作者hestaru
相关产品推荐
相关产品推荐

