gatsby-source-nytimes-books-api
Version:
This [GatsyJS](https://gatsbyjs.org) source plugin fetches data from the [NYTimes Books API](https://developer.nytimes.com/docs/books-product/1/overview)
38 lines (31 loc) • 1.05 kB
JavaScript
const axios = require("axios")
const getResults = require("./getResults")
const getQueryString = require("./getQueryString")
const { NYTIMES_API, PLUGIN_NAME } = require("../constants")
function getReviews(options, reporter) {
const { token, ...params } = options
const queryObj = { "api-key": token }
const acceptedParams = ["isbn", "author", "title"]
let apiUrl = `${NYTIMES_API}/reviews.json`
const paramKeys = Object.keys(params)
if (!paramKeys.length) {
return new Promise(function(_, reject) {
reporter.warn(
`${PLUGIN_NAME}: reviews endpoint requires at least one query parameter value`
)
return reject()
})
}
paramKeys.forEach(key => {
const value = params[key]
if (value) {
queryObj[key] = params[key]
}
})
const query = getQueryString(params, acceptedParams, queryObj)
apiUrl = `${apiUrl}?${query}`
return axios(apiUrl)
.then(data => getResults(data))
.catch(err => reporter.error(`Could not get book reviews: ${err}`))
}
module.exports = getReviews