Ошибка, полученная при использовании запроса API get с использованием json и python

#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?