NPR API Ruby Client

Build Status

A simple Ruby client for the NPR API. Alternative documentation for the NPR API can be found at http://dev.npr.org.

Support

This gem is tested with these versions (but may work with others):

  • Ruby 1.9.2, 1.9.3, 2.0.0
  • NPR API version 0.94

Dependencies

  • faraday >= 0.8.0 (HTTP requests)
  • faraday_middleware >= 0.9.0 (response processing)

Installation

Add this line to your application's Gemfile:

gem 'npr'

And then execute:

$ bundle

Or install it yourself as:

$ gem install npr

Usage

API Key

NPR requires that you have an API key in order to use their API. More information about this (including how to register) can be found at NPR's API Documentation.

Configuration

API requests can be configured globally. This is recommended for setting the API Key, but you can also set other parameters which will be passed in with every request (unless overridden):

NPR.configure do |config|
  config.apiKey         = "YOUR_API_KEY"
  config.sort           = "date descending"
  config.requiredAssets = "text"
end

For a Rails application, a good place to put the configuration would be in an initializer, such as config/initializers/npr_config.rb.

DSL

The DSL is modeled after Rails' ActiveRecord::Relation, so for the most part, if you understand that, then using the NPR gem will come naturally to you!

To find a story by ID:

NPR::Story.find(1999) #=> NPR::Story

NPR::Story#find will either return a Story object if it was found, or an array of Messages from the NPR API.

Building a query:

NPR::Story.where(date: [2.days.ago..Time.now]).order("date ascending").limit(10).offset(50)

That's a contrived example but it shows all the methods available.

You can also query directly on an NPR::API::Client object, if you're feeling adventurous:

client = NPR::API::Client.new(apiKey: NPR.config.apiKey)
client.query(sort: "editor assigned", numResults: "12")

The params that get passed into the #query method map directly to the parameters that NPR's API accepts. See the NPR API Input Reference for all of the options.

TODO

  • More Documentation
  • Search functionality
  • Add "select" method to QueryBuilder for the "fields" input
  • Abstract attributes so they're not tied directly to the API response.
  • Make all attributes snake_case
  • Support for "correction" node
  • Support for "container" node
  • Support for "thumbnail" node
  • Support a way to return the raw NPRML if requested.

Contributing

Please send PR's for any new features or bug fixes!

Run tests with bundle exec rake test.