Google Books API返回缺少的参数

时间:2018-09-27 22:09:27

标签: json reactjs google-api google-books

我正在制作一个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}

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

2 个答案:

答案 0 :(得分:1)

我没有深入研究API文档。理想的解决方案是仅返回具有标价的书的查询参数(例如您尝试使用filter=paid-ebooks)。由于这不起作用,一个简单的解决方法是一旦获得结果就过滤掉结果。

假设响应中包含一个书本对象数组,则看起来像这样:

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

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

答案 1 :(得分:0)

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