Nike
A Ruby client for the Nike+ API. Here is how I use it.
Features
- Run Stats
- Heart Rate Stats
- GPS Data
- Automatic Unit Conversion
- Data Set Caching
Installation
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]
Examples
$ 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
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)
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request