Google 本书 api returns 缺少参数
Google books api returns missing parameters
我正在制作一个 React 应用程序,它按书名和 returns 结果搜索一本书。
大部分情况下都很好,但对于某些搜索的标题(例如"hello"),由于缺少参数,无法获得结果。
特别是 "amount" 值丢失,即使我在获取 api.使用 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 中的已知错误还是有办法防止这种情况发生?我不明白为什么它仍然 returns 我 e-books 即使有 filter=paid-ebooks
参数也不出售。
我没有深入研究 API 文档。一个理想的解决方案是一个查询参数,它只发回标价的书(就像你用 filter=paid-ebooks
试过的那样)。因为这不起作用,一个简单的解决方法是在获得结果后对其进行过滤。
假设响应包含一组书籍对象,它看起来像这样:
const paidBooks = apiResponse.data.filter(book => book.listPrice)
此代码将从 API 获取响应,并过滤掉所有不包含 listPrice
真值的书籍
完全正确,实际上我从未使用过 React,但同样的逻辑尝试使用 try{ }catch(error){} 来处理那些丢失的数据
我正在制作一个 React 应用程序,它按书名和 returns 结果搜索一本书。
大部分情况下都很好,但对于某些搜索的标题(例如"hello"),由于缺少参数,无法获得结果。
特别是 "amount" 值丢失,即使我在获取 api.使用 projection=full
也无济于事。
例如,当我用
调用 apihttps://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 中的已知错误还是有办法防止这种情况发生?我不明白为什么它仍然 returns 我 e-books 即使有 filter=paid-ebooks
参数也不出售。
我没有深入研究 API 文档。一个理想的解决方案是一个查询参数,它只发回标价的书(就像你用 filter=paid-ebooks
试过的那样)。因为这不起作用,一个简单的解决方法是在获得结果后对其进行过滤。
假设响应包含一组书籍对象,它看起来像这样:
const paidBooks = apiResponse.data.filter(book => book.listPrice)
此代码将从 API 获取响应,并过滤掉所有不包含 listPrice
完全正确,实际上我从未使用过 React,但同样的逻辑尝试使用 try{ }catch(error){} 来处理那些丢失的数据