A REST Client for the Nike+ API
Switch branches/tags
Nothing to show
Clone or download
Latest commit 21af675 May 1, 2013
Failed to load latest commit information.
lib no ds_store Apr 30, 2013
.gitignore all sorts of stuff Aug 13, 2012
Gemfile all sorts of stuff Aug 13, 2012
LICENSE.txt all sorts of stuff Aug 13, 2012
README.md readme Sep 22, 2012
Rakefile all sorts of stuff Aug 13, 2012
TODO fixing spec Aug 29, 2012
nike.gemspec fixing spec Aug 29, 2012



A Ruby client for the Nike+ API. Here is how I use it.


  • Run Stats
  • Heart Rate Stats
  • GPS Data
  • Automatic Unit Conversion
  • Data Set Caching


Add this line to your application's Gemfile:

gem 'nike'

And then execute:

$ bundle

Or install it yourself as:

$ gem install nike

Basic Usage

Initialize the client

$ c = Nike::Client.new('your_email', 'your_password')

A summary of all activities by type (type is :run by default)

$ c.activities                      # get all runs

$ c.activities(type: :hr)           # get all heart rate activities

Full activity data (Slow if you have alot of data, use c.activity to fetch a detailed data set for a single activity)

$ c.detailed_activities             # get detailed data for all runs

$ c.detailed_activities(type: :hr)  # get detailed data for all hr activity

Detailed data for a single activity (The id can be found in using the summary calls above)

$ c.activity(id)

Lifetime stats

$ c.lifetime_totals                 # lifetime running totals

$ c.lifetime_totals(type: :hr)      # lifetime hr totals

More metrics

$ c.time_span_metrics               # run metrics

$ c.time_span_metrics(type: :hr)    # hr metrics

Distance by time of day

$ c.time_of_day_metrics

Distance by terrain

$ c.terrains

Pace data

$ c.paces

Basic stats that appear on the Nike+ homepage

$ c.homepage_stats

GPS Data

Cheking if an activity includes GPS data

$ a = @c.activity(#######)

$ a.gps                             # => true

Getting to the GPS data

$ a.geo.waypoints                   # list all GPS waypoints

$ a.geo.waypoints.first             # => {"lat"=>42.115833, "lon"=>-87.776344, "ele"=>181.78954}
$ a.geo.waypoints.first.lat         # => 42.115833

Automatic Unit Conversion

Check to see which conversion helpers are available for a specific data set

$ a = @c.activity(#######)

$ a.conversion_helpers              # => [:distance_in_kilometers, :distance_in_miles, :duration_inseconds,
                                          :duration_in_minutes, :duration_in_hours, :duration_in_hms,
                                          :speed_in_mph, :speed_in_kph]


$ a.duration                        # => 6402672
$ a.duration_in_seconds             # => 6402.672
$ a.duration_in_minutes             # => 106.7112
$ a.duration_in_hours               # => 1.77852
$ a.duration_in_hms                 # => "01:46:42"

All time fields are automatically converted to Ruby Time objects

$ a.start_time_utc.class            # => Time


Caching is enabled by default due to the slowness of the API and the large data set sizes.

Toggle caching during client initialization

$ c = Nike::Client.new('your_email', 'your_password', caching: false)

Toggle caching after client initialization

$ c.caching = false

Force the request for a particular data set even if caching is enabled. This will have the side-effect of refreshing the cache.

$ c.activities!

$ c.activity!(12345)


  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request