python - 使用多个不同长度的参数循环 GET 请求
问题描述
几天前我问的这个问题的后续问题:
我仍然需要为列表的每个元素调用 API,但现在我需要一些额外的参数。我有一个不同长度的每个参数的值列表。每个customerId 都有多个keywordIds 和areaIds(对于给定的客户,它们总是具有相同的长度)。每个客户都有不同的关键字。例如,前五个关键字 ID 属于 customerlist 中的第一个 ID。接下来的三个关键字 ID 到 customerlist 中的第二个 ID,依此类推。我试过了zip
,但我只得到了第一个 customerid 的第一个关键字的第一个条目,而不是每个客户的每个关键字的所有条目(在这种情况下,关键字 1172646 和来自客户 803818 的区域 29010 的信息 isareafirst =假)。
import json
import requests
import itertools
API_BASEURL = "https://exampleurl.com/"
API_TOKEN = "abc"
HEADERS = {'content-type' : 'application/json',
'Authorization': API_TOKEN }
customerlist = [803818, 803808, 803803,803738,803730]
keywordlist = [1172646, 1218994,1218992 1218993,1218992, 1218995, 1218993, 1173529, 1235569,1187456,1187455,1187453]
arealist = [29010, 28882, 28882, 28882, 28882, 28882, 28882, 28882, 31237,31237, 31237,31237]
isareafirstlist = [False, False, True, False, False, False, True, False, False,False, False, False]
def get_history(endpoint):
responses = []
for i,j,k,l in zip(customerlist,keywordlist, arealist, isareafirstlist):
api_endpoint = endpoint
params = {'customerid' : i,
'keywordid' : j,
'areaid' : k,
'isareafirst': l}
response = requests.get(f"{API_BASEURL}/{api_endpoint}",
params = params,
headers = HEADERS)
res = json.loads(response.text)
responses.append(res)
return (responses)
我也试过itertools.zip_longest
了,但这只是给我错误,我收到空列表zip
def get_history(endpoint):
responses = []
for i,j,k,l in itertools.zip_longest(customerlist,keywordlist, arealist, isareafirstlist):
api_endpoint = endpoint
params = {'customerid' : i,
'keywordid' : j,
'areaid' : k,
'isareafirst': l}
response = requests.get(f"{API_BASEURL}/{api_endpoint}",
params = params,
headers = HEADERS)
res = json.loads(response.text)
responses.append(res)
return (responses)
那么我怎样才能循环使用所有可能的组合呢?
解决方案
Would this implementation help?
import itertools
customerlist = [803818, 803808, 803803,803738,803730]
keywordlist = [1172646, 1218994,1218992, 1218993,1218992, 1218995, 1218993, 1173529, 1235569,1187456,1187455,1187453]
arealist = [29010, 28882, 28882, 28882, 28882, 28882, 28882, 28882, 31237,31237, 31237,31237]
isareafirstlist = [False, False, True, False, False, False, True, False, False,False, False]
list_of_lists = [customerlist, keywordlist, arealist, isareafirstlist]
for _ in itertools.product(*list_of_lists):
print _
推荐阅读
- css - 如何禁用材质 UI 输入的波纹效果?
- python - 使用“modeBarButtonsToAdd”或“modeBarButtons”时,Dash 无法识别“drawclosedpath”按钮
- html - 网页中什么样的元素可以设置焦点?
- swift - 属性初始化器和 init() 函数之间的区别
- java - 在 Java 中查找命理数
- javascript - 使用 IE 浏览器的 javascript 中预期的 ')'
- javascript - JQuery - 如果没有其他按钮具有保证其外观的类,则隐藏按钮
- c - 如何在 BST 中输入更多信息并使用条目号作为访问它的键?
- python-2.7 - 删除 opencv 4.2 ubuntu 16.04
- javascript - 如何获取特定 Javascript 属性的名称?