Как создать вложенные параметры для библиотеки запросов - PullRequest
0 голосов
/ 28 февраля 2019

Я использую популярную библиотеку запросов для запроса данных из 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]

Как это можно сделать?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Вы можете использовать рекурсивную функцию, чтобы сгладить параметры от диктата до пар ключ-значение в формате в квадратных скобках, который требуется API:

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)}
)
0 голосов
/ 28 февраля 2019

Если я правильно прочитал эту проблему , вы можете просто использовать имя в скобках в качестве ключа для ваших параметров (см. этот комментарий ):

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()
...