首页 > 解决方案 > 使用多个不同长度的参数循环 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)

那么我怎样才能循环使用所有可能的组合呢?

标签: pythonget-request

解决方案


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 _

推荐阅读