我正在使用流行的请求库来从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:
在上面的例子中,我需要传递以下嵌套参数:
request[fields][description]
request[fields][sections]
如何实现这一目标?
如果我正确读取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()
您可以使用递归函数将参数从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)}
)