Я думаю, что страница USDA немного сбивает с толку. По крайней мере, форма, из которой вы извлекли data = '{auth[email]:aaaa,auth[password]:aaaaaa}'
, не соответствует ни одному из известных мне вариантов Curl или python .requests. Не то чтобы я знаю о большинстве из этих вариантов, поэтому могу ошибаться, но и у меня это не сработало. Идеально работает модель, показанная в приведенном вами примере кода:
A curl request to get the api-token:
curl -X POST "https://usda.library.cornell.edu/user_token" -d '{"auth": {"email":"john.smith@example.com","password":"password"}}' -H "Content-Type: application/json"
, что соответствует фрагменту Python:
token = requests.post("https://usda.library.cornell.edu/user_token",
json={'auth':
{'email': 'john.smith@example.com',
'password':'password'}})
Это будет создать ответ JSON, который вы можете получить с помощью метода json
объекта ответа:
bearer = token.json()['jwt']
bearer
будет строкой типа 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjg2MDN9.CWZPPpzCGj8qnOrHow8eJmDkzn5sSpSoFPffgq57Ayo'
, которую вам нужно передать ваши запросы API.
Самый простой способ сделать это, как мне кажется, - просто предоставить заголовок напрямую. (Несомненно, requests
предоставляет механизм для этого, поэтому, если вы рыскаете по документации, вы можете найти его. Я этого не делал, потому что сделать это вручную очень просто.)
data = requests.get(
'https://usda.library.cornell.edu/api/v1/publication/search?q=Avocado',
headers={'Authorization': 'Bearer '+token.json()['jwt']})
Опять же , проще всего будет использовать метод json
для извлечения информации:
>>> import pprint
>>> pprint.pprint(data.json())
[{'agency': ['National Agricultural Statistics Service'],
'agency_acronym': ['NASS'],
'contact_email': ['nass@nass.usda.gov'],
'contact_organization': ['National Agricultural Statistics Service'],
'description': ['This special publication reports on the damage done to the '
'citrus, avocado, vegetable, and sugar cane crops in Florida '
'following Hurricane Cleo in 1964. '],
'frequency': ['Seasonal'],
'id': 'dv13zt23r',
'identifier': ['SpecHurrDa'],
'keywords': ['Citrus',
'hurricanes',
'weather',
'sugarcane',
'avocados',
'vegetables'],
'resource_type': ['Report'],
'status': ['Inactive'],
'subject': ['Crops and Crop Products:Sugar Crops',
'Crops and Crop Products:Fruits',
'Agriculture Economics and Management:Weather',
'Crops and Crop Products:Vegetables and Pulses'],
'subscribable': 'No',
'title': ['Special Hurricane Damage Report: August 26-27, 1964']},
...