如何为请求库创建嵌套参数

问题描述 投票:1回答:2

我正在使用流行的请求库来从API请求数据。以下作品:

import requests

parameters = {
        'action': 'query_plugins',
        'per_page': 10,
        'browse': 1,
        'page': 1,
}

response = requests.get('https://api.wordpress.org/plugins/info/1.1/', parameters)

results = response.json()

print(results)

但是有一些嵌套的参数,例如,这里是我可能会查询的URL:

https://api.wordpress.org/plugins/info/1.1/?action=query_plugins&request[per_page]=10&request[browse]=1&request[page]=1&request[fields][description]=0&request[fields][sections]=0

在上面的例子中,我需要传递以下嵌套参数:

request[fields][description]
request[fields][sections]

如何实现这一目标?

python python-requests query-parameters
2个回答
0
投票

如果我正确读取this issue,您只需使用括号中的名称作为参数的键(请参阅this comment):

import requests

parameters = {
    'action': 'query_plugins',
    'per_page': 10,
    'browse': 1,
    'page': 1,
    'request[fields][description]': 0,
    'request[fields][sections]': 0
}

response = requests.get('https://api.wordpress.org/plugins/info/1.1/', parameters)

results = response.json()

0
投票

您可以使用递归函数将参数从dicts的dict转换为API所需的square-bracketed格式的键值对:

def params(name, parameters):
    def flatten(d):
        for k, v in d.items():
            if isinstance(v, dict):
                for s, i in flatten(v):
                    yield '[%s]%s' % (k, s), i
            else:
                yield '[%s]' % k, v
    return {name + k: v for k, v in flatten(parameters)}

parameters = {
    'per_page': 10,
    'browse': 1,
    'page': 1,
    'fields': {
        'description': 0,
        'sections': 0
    }
}
response = requests.get(
    'https://api.wordpress.org/plugins/info/1.1/',
    {'action': 'query_plugins', **params('request', parameters)}
)
© www.soinside.com 2019 - 2024. All rights reserved.