API Google Books возвращает недостающие параметры - PullRequest
0 голосов
/ 28 сентября 2018

Я создаю приложение реагирования, которое ищет книгу по названию и возвращает результаты.

В основном это работает нормально, но при поиске некоторых названий (например, "привет") оно не может получитьрезультаты, потому что параметры отсутствуют.

Специально, значение "сумма" отсутствует, и это может принести мне электронные книги, которые не продаются, даже если я добавлю параметр filter=paid-ebooks при получении API.Использование projection=full также не помогает.

Например, когда я вызываю API с помощью

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

и использую извлеченные данные из массива 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.Это известная ошибка в API Книг Google или есть способ предотвратить это?Я не понимаю, почему он все еще возвращает мне электронные книги, которые не продаются даже с filter=paid-ebooks param.

1 Ответ

0 голосов
/ 28 сентября 2018

Я не копался в документации API.Идеальным решением будет параметр запроса, который отправляет обратно книги только по прейскурантной цене (как вы пытались с filter=paid-ebooks).Поскольку это не работает, простым решением будет фильтрация результатов после их получения.

Если в ответе содержится массив объектов книги, он будет выглядеть примерно так:

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

Этот код примет ответ от API и отфильтрует все книги, которые не содержат истинного значения для listPrice

...