-1
@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)
4

2 回答 2

0
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() 这些响应的结果,您会收到您发布的错误消息。

于 2020-07-12T15:26:50.350 回答
0

谷歌搜索你无法上班的 ISBN 号码,这些号码发布在评论中,显示他们似乎错误地删除了前导零。(许多 ISBN 代码看起来像数字,但最后一个字符通常是字母符号,因此您不应该将它们作为整数值处理。)

尝试用前导零填充,这样代码的长度总是正好为 10 或 13 个字符;任何其他长度都不是有效的 ISBN。

可能在实际数据库中修复此问题,或者更好的是,在您的数据库中提供信息的任何来源中;您不希望继续处理像这样的损坏数据。

于 2020-07-13T05:16:48.930 回答