#python #json #http #python-requests
#питон #json #http #python-запросы
Вопрос:
Я использую библиотеку запросов python для выполнения ‘GET’ из API. вот часть моего кода :
payload = { 'topicIds':'128487',
'topicIds':'128485',
'topicIds': '242793',
'timePeriod':'10d', }
r= requests.get(url, params=payload, headers=headers)
Согласно документации API, мы можем назначить несколько идентификаторов темы одному запросу следующим образом: <url>topicId=123amp;topicId=246
когда я пытаюсь установить значение topicIds в виде списка, подобного этому:
payload = { 'topicIds':['128487' , '242793'],
Я получаю сообщение об ошибке : {u'error': u'topicIds: has 2 terms, should be between 0 and 1'}
Однако, когда я запускаю код, я получаю данные только из последних topicIds => ‘topicIds’: ‘242793’ Я неправильно записываю словарь полезной нагрузки?
Спасибо,
Комментарии:
1. Есть ли причина, по которой вы не создаете список идентификаторов тем?
2. да, это не сработало (см. Правки)
Ответ №1:
Попробуйте:
payload = {'topicIds[]': ['128487', '242793']}
r = requests.get(url, params=payload, headers=headers)
Это наиболее распространенный способ определения массивов в строках запроса.
Комментарии:
1. как это вписывается в переменную полезной нагрузки?
2. Это была просто ошибка с моей стороны при копировании моего тестового кода. Сейчас я его отредактировал. Следует обратить внимание на скобки после идентификаторов тем. Стоит попробовать, и мы действительно больше не можем помочь, не зная спецификации API.
3. @fasouto отредактировал мой ответ по какой-то странной причине вообще без тестирования, поэтому я откатил его. Результирующий URL-адрес НЕ совпадает со скобками и без скобок. Использование скобок приводит к example.com/?topicIds[]=128487amp;topicIds[]=242793 — Безрезультатно в example.com/?topicIds=128487amp;topicIds=242793 — Скобки — это наиболее распространенный способ определения массивов в параметрах запроса и публикации (например, PHP анализирует GET params как массивы с таким синтаксисом).
4. @scandinavian_ Я тестировал, и у меня это не сработало, поэтому я отредактировал его. Я видел topicIds=[1,2] и topicIds=1amp;topicIds= 2, но никогда не видел topicIds[]= [1,2], так что я думаю, что это была опечатка. Я не знаю, как лучше поступить, и у меня сейчас нет времени на расследование, поэтому приношу извинения за причиненные неудобства
Ответ №2:
Это тоже сработало бы
params = {'topicIds': ['128487', '128485', '242793'],
'timePeriod':'10d', }
r= requests.get(url, params=params)
Ответ №3:
Да, вы неправильно записываете полезную нагрузку, просто попробуйте напечатать этот dict, вы получите
{'topicIds': '242793', 'timePeriod': '10d'}
Ключи переопределяются в словаре
Я думаю, что было бы лучше сделать одну строку из всех topicIds, что-то вроде этого
'<separator>'.join([<list of topicIds>])