Google 图书 api 返回缺少的参数

Posted

技术标签:

【中文标题】Google 图书 api 返回缺少的参数【英文标题】:Google books api returns missing parameters 【发布时间】:2019-03-03 21:19:22 【问题描述】:

我正在制作一个 React 应用程序,它可以按书名搜索一本书并返回结果。

它大部分工作正常,但是对于搜索的某些标题(例如“hello”)它无法获得结果,因为缺少参数。

特别是,“金额”值丢失了,即使我在获取 api 时添加了filter=paid-ebooks 参数,它也可以获得非出售的电子书。使用projection=full 也无济于事。

例如,当我用

调用 api 时
https://www.googleapis.com/books/v1/volumes?printType=books&filter=paid-ebooks&key=$APIKEY

并在 reactjs 中使用 books 数组中获取的数据:

this.props.books.map((book, index) => 
         return (
              <CardItem
                 key=index
                 title=book.volumeInfo.title
                 authors=book.volumeInfo.authors ? 
                 book.volumeInfo.authors.join(', ') : 
                 "Not provided"
                 price=book.saleInfo.listPrice.amount
                 publisher=book.volumeInfo.publisher
                 addToCart=() => 
                 this.props.addItem(this.props.books[index])
                  />
                            )
                        )

它得到的一个结果是这样的:

"saleInfo": 
    "country": "TR",
    "saleability": "NOT_FOR_SALE",
    "isEbook": false
   

虽然应该是这样,但预期的是:

"saleInfo": 
    "country": "TR",
    "saleability": "FOR_SALE",
    "isEbook": true,
    "listPrice": 
     "amount": 17.23,
     "currencyCode": "TRY"
    

并尝试使用此 api 答案进行搜索会引发错误:

TypeError: Cannot read property 'amount' of undefined

price=book.saleInfo.listPrice.amount

正如您在反应代码的authors 中看到的那样,这个问题也与作者参数有关,我已经绕过了,如代码中所示。但我不能对amount 做同样的事情。这是 Google Books API 中的一个已知错误,还是有办法防止这种情况发生?我不明白为什么即使使用filter=paid-ebooks 参数,它仍然会退回我不出售的电子书。

【问题讨论】:

【参考方案1】:

我还没有深入研究 API 文档。一个理想的解决方案是一个查询参数,它只发回带有标价的书籍(就像您尝试使用 filter=paid-ebooks 一样)。因为这不起作用,一个简单的解决方法是在获得结果后对其进行过滤。

假设响应包含书籍对象数组,它看起来像这样:

const paidBooks = apiResponse.data.filter(book =&gt; book.listPrice)

此代码将从 API 获取响应,并过滤掉所有不包含 listPrice 真实值的书籍

【讨论】:

【参考方案2】:

完全正确,实际上我从未使用过 react 但相同的逻辑尝试使用 try catch(error) 来处理那些丢失的数据

【讨论】:

以上是关于Google 图书 api 返回缺少的参数的主要内容,如果未能解决你的问题,请参考以下文章

G Suite帐户在Calendar API中缺少displayName参数

YouTube Data API Insert 方法缺少啥参数

G Suite 帐户在日历 API 中缺少 displayName 参数

Google 图书 api 始终不返回任何内容

Google Books API - 未返回图书详细信息

Google PHP API 返回无效参数错误