#python #json #python-requests
#python #json #python-запросы
Вопрос:
Я получаю сообщение об ошибке, когда пытаюсь выполнить запрос API get. Я новичок, поэтому я мало что знаю, и я продолжаю получать ошибку. Информация об api находится здесь: https://github.com/aravindasiva/demotivational-quotes-api и API, который я использую, это https://demotivation-quotes-api.herokuapp.com/graphql Ответ API находится в массиве json, и я пытаюсь извлечь из него конкретную информацию. Любая помощь приветствуется.
import requests
import json
def get_quote():
response = requests.get('https://demotivation-quotes-api.herokuapp.com/graphql')
json_data = json.loads(response.text)
quote = json_data[0]['quote'] " -" json_data[0]['author']
return(quote)
quote = get_quote()
print(quote)
ошибка:
Traceback (most recent call last):
File "main.py", line 11, in <module>
quote = get_quote()
File "main.py", line 6, in get_quote
json_data = json.loads(response.text)
File "/usr/lib/python3.8/json/__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.8/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.8/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Комментарии:
1. выполните repr(response.text) или print(«{}».format(response.text)), и вы увидите проблему. Я не питонист, возможно, прямая печать (response.text) также будет работать
2. Когда я пробую каждое из этих решений, я получаю ту же ошибку: Traceback (последний последний вызов): File «main.py «, строка 12, в <module> print(response.text) Ошибка имени: имя «ответ» не определено
3. Вы вроде как нашли проблему … не существует такого понятия, как response.text . Теперь используйте тот же подход к ответу и посмотрите, что у вас есть
4. Я не совсем понимаю, что вы имеете в виду?
Ответ №1:
После дальнейшего изучения вашей проблемы я обнаружил вашу проблему. API, который вы пытаетесь использовать, ожидает post-запрос, а не get-запрос. Затем ожидается полезная нагрузка, содержащая запрос к api, чтобы найти вам нужные цитаты.
Вы хотите использовать этот requests.post()
метод.
Этого должно быть достаточно, чтобы указать вам правильное направление, я бы рекомендовал посмотреть несколько руководств по использованию requests
и различиям с различными методами HTTP.
Я думаю, ваша проблема в том, что ваш ответ не содержит текстовых данных. Возможно, вместо этого он возвращает json? Попробуйте напечатать свой ответ в формате json следующим образом
print(response.json())
Вы также можете попробовать выполнить прямую печать response.text
, чтобы подтвердить, что это a None
.
Проверьте ответ, прежде чем пытаться преобразовать его в свой метод. json.loads
Редактировать:
Попробуйте это
import requests
response = requests.get('https://demotivation-quotes-api.herokuapp.com/graphql')
print(response.status_code)
print(response.json())
Комментарии:
1. Я попробовал ваше новое решение и получил это в качестве ответа: 400 <связанный метод Response.json из <Response [400]>> Что мне делать дальше?
2. Смотрите мою правку. Что именно вы пытаетесь сделать?
3. Я пытаюсь получить информацию с сайта и отформатировать ее для печати таким образом, чтобы она отображалась как цитата, а затем автор.
4. Хорошо, я думаю, я понимаю, что вы говорите. Есть ли у вас какие-либо идеи о том, как настроить запрос post?