json .decoder.JSONDecodeError: Ожидаемое значение: строка 1 столбец 1 (символ 0). отправка ответа только для 10 символов - PullRequest
0 голосов
/ 12 июля 2020
@app.route('/api/<string:isbn>', methods = ['GET'])
def isbn(isbn):
#import api from Goodreads (stats)

    book_data = db.execute("SELECT * FROM books WHERE isbn=:isbn",{'isbn':isbn}).fetchone()
    title = book_data['title']
    author = book_data['author']
    year = book_data['year'] 


    res = requests.get("https://www.goodreads.com/book/review_counts.json", params={"key": "4RbGuzka0IUcJWWk1mivqg", "isbns":isbn }).json()

    reviews_count = float(res['books'][0]['reviews_count'])
    avg_score = float(res['books'][0]['average_rating'])
    dic = {"title": title, "author":author, "year": year,"isbn":isbn,"reviews_count":reviews_count,"avg_score":avg_score}
    print(dic)
    return jsonify(dic)

может кто-нибудь, пожалуйста, скажите мне, что не так с этим кодом, когда я указываю 10-значный номер isbn, он дает мне правильный api. когда номер ISBN, который я указываю, меньше 10 символов, я получаю внутреннюю ошибку сервера как:

 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)

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Поиск в Google номеров ISBN, которые вы не смогли получить на работу, которые были опубликованы в комментарии , показывает, что они, похоже, неправильно потеряли начальный ноль. (Многие коды ISBN выглядят как числа, но последний символ часто является символом алфавита c, поэтому вы не сможете обрабатывать их как целые числа.)

Попробуйте заполнить начальными нулями, чтобы код был всегда ровно 10 или 13 символов; любая другая длина не является допустимым ISBN.

Возможно, исправьте это в реальной базе данных, или, что еще лучше, в любом источнике, предоставившем информацию в вашей базе данных; вы не хотите сталкиваться с подобными поврежденными данными в будущем.

0 голосов
/ 12 июля 2020
import requests
isbn = '1590388127'
result = requests.get("https://www.goodreads.com/book/review_counts.json",
                   params={"key": "4RbGuzka0IUcJWWk1mivqg", "isbns": isbn})

if result.status_code == 200:
    res = result.json()
else:  # print reason
    print(result.text)

Верхняя версия работает. Однако, например, «756403146» вы получите ответ «'Нет книг, соответствующих этим ISBN.'» (В result.text). Следовательно, isbn отсутствует в базе данных. Если вы попытаетесь выполнить. json () результат этих ответов, вы получите сообщение об ошибке, которое вы опубликовали.

...