Google 图书 API 返回缺少的参数

IT技术 json reactjs google-api google-books
2021-05-19 08:26:01

我正在制作一个react应用程序,它按标题搜索一本书并返回结果。

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

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

例如,当我调用 api 时

https://www.googleapis.com/books/v1/volumes?printType=books&filter=paid-ebooks&key=${APIKEY}

在 reactjs 中使用书籍数组中获取的数据

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}

正如您在react代码中看到的authors,这个问题也出现在作者参数上,我在代码中已经绕过了。但我不能对amount. 这是 Google Books API 中的已知错误还是有办法防止这种情况发生?我不明白为什么它仍然向我返回即使有filter=paid-ebooks参数也不出售的电子书

2个回答

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

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

const paidBooks = apiResponse.data.filter(book => book.listPrice)

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

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