Skip to main content
Community Plugin
View plugin on GitHub
See starters using this

Gatsby Source NYTimes Books API Plugin

This GatsyJS source plugin fetches data from the NYTimes Books API

How to install

npm i gatsby-source-nytimes-books-api

How to use

Add a config object to your Gatsby config.js file. You must include an api key obtained from the NYTimes Developer Network

// config.js
{
  resolve: "gatsby-source-nytimes-books-api",
  options: {
    token: 'YOUR_API_KEY', // aqcuire from the NYTimes api site
    type: 'history' // the books data you want access to
    // additional properties for query parameters
  }
}

Available Types

There are six different endpoints available from the NYTimes Books API. Each endpoint has a corresponding type that can be set to pull data from. Below are the available types and the endpoints they correspond to. Check out the NYTimes Books API documentation to learn more about what parameters are available and required to successfully create a query.

lists

Get Best Sellers list. If no date is provided returns the latest list.

date-list

Get Best Sellers list by date.

names-list

Get Best Sellers list names.

overview

Get top 5 books for all the Best Sellers lists for specified date.

reviews

Get book reviews.

history

Get Best Sellers list history.

Passing Query Parameter Values

The books API allows you to query best sellers lists, reviews and books by passing any number of different parameter values. To pass in parameter values to the source plugin, include the parameter name and value as a property of the options object in your config.js file. For example, to use the overview type you can set a publish_date property:

// config.js
{
  resolve: "gatsby-source-nytimes-books-api",
  options: {
    token: 'YOUR_API_KEY',
    type: 'overview'
    published_date: "2018-10-10" // available query param value specified in the NYTimes docs
  }
}

The additional properties in the options object will be used to construct the URL for the API call:

https://api.nytimes.com/svc/books/v3/lists/overview.json?published_date=2018-10-10&api-key=[YOUR_API_KEY]

Use the NYTimes Books API documentation to determine which parameters can be passed.

How to query for data

lists

query {
  allTimesBooksList {
    nodes {
      amazon_product_url
      asterisk
      bestsellers_date
      book_details {
        age_group
        author
        contributor
        contributor_note
        description
        price
        primary_isbn10
        primary_isbn13
        publisher
        title
      }
      dagger
      display_name
      id
      isbns {
        isbn10
        isbn13
      }
      list_name
      published_date
      rank
      rank_last_week
      weeks_on_list
      reviews {
        article_chapter_link
        book_review_link
        first_chapter_link
        sunday_review_link
      }
    }
  }
}

names-list

query {
  allTimesBooksListName {
    nodes {
      display_name
      list_name
      list_name_encoded
      newest_published_date
      oldest_published_date
      updated
      id
    }
  }
}

date-list

Explorer
query 
MyQuery
Docs
query {
  allTimesBooksDateList {
    nodes {
      bestsellers_date
      books {
        age_group
        amazon_product_url
        article_chapter_link
        asterisk
        author
        book_image
        book_image_height
        book_image_width
        book_review_link
        book_uri
        buy_links {
          name
          url
        }
        contributor
        contributor_note
        dagger
        description
        first_chapter_link
        isbns {
          isbn10
          isbn13
        }
        price
        primary_isbn10
        primary_isbn13
        publisher
        rank
        rank_last_week
        sunday_review_link
        title
        weeks_on_list
      }
      display_name
      id
      internal {
        content
        contentDigest
        description
        fieldOwners
        ignoreType
        mediaType
        owner
        type
      }
      list_name
      list_name_encoded
      next_published_date
      normal_list_ends_at
      previous_published_date
      published_date
      published_date_description
    }
    totalCount
  }
}

history

query {
  allTimesBooksBestSellerHistory {
    nodes {
      age_group
      author
      contributor
      contributor_note
      description
      id
      internal {
        content
        contentDigest
        description
        fieldOwners
        ignoreType
        mediaType
        owner
        type
      }
      isbns {
        isbn10
        isbn13
      }
      price
      publisher
      ranks_history {
        asterisk
        bestsellers_date
        dagger
        display_name
        list_name
        primary_isbn10
        primary_isbn13
        published_date
        rank
        weeks_on_list
      }
      reviews {
        article_chapter_link
        book_review_link
        first_chapter_link
        sunday_review_link
      }
      title
    }
  }
}

overview

query {
  allTimesBooksListOverview {
    nodes {
      bestsellers_date
      id
      internal {
        content
        contentDigest
        description
        fieldOwners
        ignoreType
        mediaType
        owner
        type
      }
      lists {
        display_name
        list_id
        list_image
        list_image_height
        list_image_width
        list_name
        list_name_encoded
        updated
      }
      next_published_date
      previous_published_date
      published_date
      published_date_description
    }
  }
}

reviews

query MyQuery {
  allTimesBooksReview {
    nodes {
      book_author
      book_title
      byline
      id
      internal {
        content
        contentDigest
        description
        fieldOwners
        ignoreType
        mediaType
        owner
        type
      }
      isbn13
      publication_dt
      summary
      url
      uri
      uuid
    }
  }
}

How to run tests

npm test

How to develop locally

To work on this plugin locally take a look at Gatsby’s documentation on creating a local plugin. Essentially, you will need to include this plugin in a plugins directory of another project to test changes.

How to contribute

Check out the CONTRIBUTING guide to find out how you can get involved!

Docs
Tutorials
Plugins
Blog
Showcase