如何从Google Books API中正确获取书籍作者名称?
原因分析
- 谷歌图书API针对同一个ISBN可能返回多个匹配的卷目(volume)条目,你提供的返回结果里共有2条匹配数据:
- 第一条条目(id为
JEP3sgEACAAJ)的volumeInfo字段中未收录作者信息,所以没有authors字段 - 第二条条目(id为
ZRgnzQEACAAJ)的volumeInfo字段中明确包含authors字段,值为['Catherine DeVries'],就是你要找的作者信息
- 第一条条目(id为
- 你的代码本身逻辑没有问题,只是没有区分多条返回结果,默认只看第一条数据就会误以为没有作者信息。同时你原有代码里存在两处小笔误:请求逻辑写法错误、
json.load是读取文件对象的方法,读取接口响应应该用json.loads或者直接调用响应对象的json()方法。
修复方案
遍历所有返回的items条目,逐一检查volumeInfo下是否存在authors字段,优先取用包含该字段的条目数据即可,示例代码如下:
import requests import json def getBooks(isbn): url = f"https://www.googleapis.com/books/v1/volumes?q=isbn:{isbn}" resp = requests.get(url) data = resp.json() # 遍历所有匹配条目取带作者信息的结果 for item in data.get("items", []): volume_info = item.get("volumeInfo", {}) if "authors" in volume_info: print("书籍作者:", volume_info["authors"]) return volume_info print(getBooks("9780310709626"))
如果想要简化遍历逻辑,也可以在请求URL中添加orderBy=relevance参数,让相关度更高、信息更完整的条目排在返回列表的前几位。
内容的提问来源于stack exchange,提问作者blackCAt
相关产品推荐
相关产品推荐

