strava-ruby-client 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/README.md +176 -15
  4. data/bin/strava-oauth-token.rb +47 -0
  5. data/lib/strava-ruby-client.rb +22 -1
  6. data/lib/strava/api/client.rb +150 -3
  7. data/lib/strava/api/cursor.rb +29 -0
  8. data/lib/strava/models/activity.rb +90 -4
  9. data/lib/strava/models/activity_zone.rb +13 -0
  10. data/lib/strava/models/athlete.rb +8 -0
  11. data/lib/strava/models/club.rb +26 -0
  12. data/lib/strava/models/comment.rb +12 -0
  13. data/lib/strava/models/gear.rb +11 -0
  14. data/lib/strava/models/lap.rb +26 -0
  15. data/lib/strava/models/map.rb +1 -0
  16. data/lib/strava/models/mixins/distance.rb +73 -0
  17. data/lib/strava/models/mixins/elevation.rb +46 -0
  18. data/lib/strava/models/mixins/time.rb +99 -0
  19. data/lib/strava/models/photo.rb +10 -0
  20. data/lib/strava/models/photos.rb +9 -0
  21. data/lib/strava/models/segment.rb +33 -0
  22. data/lib/strava/models/segment_effort.rb +24 -0
  23. data/lib/strava/models/similar_activities.rb +17 -0
  24. data/lib/strava/models/split.rb +29 -0
  25. data/lib/strava/models/timed_zone_range.rb +9 -0
  26. data/lib/strava/models/trend.rb +12 -0
  27. data/lib/strava/version.rb +1 -1
  28. metadata +35 -47
  29. data/.gitignore +0 -6
  30. data/.rspec +0 -2
  31. data/.rubocop.yml +0 -15
  32. data/.rubocop_todo.yml +0 -47
  33. data/.travis.yml +0 -9
  34. data/CONTRIBUTING.md +0 -125
  35. data/Dangerfile +0 -2
  36. data/Gemfile +0 -15
  37. data/RELEASING.md +0 -61
  38. data/Rakefile +0 -17
  39. data/bin/oauth-token.rb +0 -28
  40. data/spec/fixtures/strava/client_athlete.yml +0 -59
  41. data/spec/fixtures/strava/client_athlete_activities.yml +0 -121
  42. data/spec/fixtures/strava/oauth_token_authorization_code.yml +0 -53
  43. data/spec/fixtures/strava/oauth_token_invalid_client.yml +0 -50
  44. data/spec/fixtures/strava/oauth_token_invalid_code.yml +0 -50
  45. data/spec/fixtures/strava/oauth_token_refresh_token.yml +0 -52
  46. data/spec/spec_helper.rb +0 -10
  47. data/spec/strava/api/client_spec.rb +0 -36
  48. data/spec/strava/api/config_spec.rb +0 -22
  49. data/spec/strava/oauth/client_spec.rb +0 -120
  50. data/spec/strava/oauth/config_spec.rb +0 -24
  51. data/spec/strava/version_spec.rb +0 -7
  52. data/spec/strava/web/client_spec.rb +0 -9
  53. data/spec/strava/web/config_spec.rb +0 -4
  54. data/spec/support/shared/it_behaves_like_web_client.rb +0 -131
  55. data/spec/support/vcr.rb +0 -12
  56. data/strava-ruby-client.gemspec +0 -21
data/Dangerfile DELETED
@@ -1,2 +0,0 @@
1
- toc.check
2
- changelog.check
data/Gemfile DELETED
@@ -1,15 +0,0 @@
1
- source 'http://rubygems.org'
2
-
3
- gemspec
4
-
5
- group :development, :test do
6
- gem 'danger-changelog', '~> 0.3.0'
7
- gem 'danger-toc', '~> 0.1'
8
- gem 'dotenv'
9
- gem 'pry'
10
- gem 'rake', '~> 10'
11
- gem 'rspec'
12
- gem 'rubocop', '0.60.0'
13
- gem 'vcr'
14
- gem 'webmock'
15
- end
@@ -1,61 +0,0 @@
1
- # Releasing Strava-Ruby-Client
2
-
3
- There're no hard rules about when to release strava-ruby-client. Release bug fixes frequently, features not so frequently and breaking API changes rarely.
4
-
5
- ### Release
6
-
7
- Run tests, check that all tests succeed locally.
8
-
9
- ```
10
- bundle install
11
- rake
12
- ```
13
-
14
- Check that the last build succeeded in [Travis CI](https://travis-ci.org/dblock/strava-ruby-client) for all supported platforms.
15
-
16
- Change "Next" in [CHANGELOG.md](CHANGELOG.md) to the current date.
17
-
18
- ```
19
- ### 0.2.2 (7/10/2015)
20
- ```
21
-
22
- Remove the line with "Your contribution here.", since there will be no more contributions to this release.
23
-
24
- Commit your changes.
25
-
26
- ```
27
- git add CHANGELOG.md
28
- git commit -m "Preparing for release, 0.2.2."
29
- git push origin master
30
- ```
31
-
32
- Release.
33
-
34
- ```
35
- $ rake release
36
-
37
- strava-ruby-client 0.2.2 built to pkg/strava-ruby-client-0.2.2.gem.
38
- Tagged v0.2.2.
39
- Pushed git commits and tags.
40
- Pushed strava-ruby-client 0.2.2 to rubygems.org.
41
- ```
42
-
43
- ### Prepare for the Next Version
44
-
45
- Add the next release to [CHANGELOG.md](CHANGELOG.md).
46
-
47
- ```
48
- ### 0.2.3 (Next)
49
-
50
- * Your contribution here.
51
- ```
52
-
53
- Increment the third version number in [lib/strava/version.rb](lib/strava/version.rb).
54
-
55
- Commit your changes.
56
-
57
- ```
58
- git add CHANGELOG.md lib/strava/version.rb
59
- git commit -m "Preparing for next development iteration, 0.2.3."
60
- git push origin master
61
- ```
data/Rakefile DELETED
@@ -1,17 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- require 'bundler/gem_tasks'
4
-
5
- Bundler.setup :default, :development
6
-
7
- require 'rspec/core'
8
- require 'rspec/core/rake_task'
9
-
10
- RSpec::Core::RakeTask.new(:spec) do |spec|
11
- spec.pattern = FileList['spec/**/*_spec.rb']
12
- end
13
-
14
- require 'rubocop/rake_task'
15
- RuboCop::RakeTask.new
16
-
17
- task default: %i[rubocop spec]
@@ -1,28 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'dotenv/load'
4
- require 'strava-ruby-client'
5
-
6
- client = Strava::OAuth::Client.new(
7
- client_id: ENV['STRAVA_CLIENT_ID'],
8
- client_secret: ENV['STRAVA_CLIENT_SECRET']
9
- )
10
-
11
- redirect_url = client.authorize_url(
12
- redirect_uri: 'http://localhost',
13
- response_type: 'code',
14
- scope: 'activity:read'
15
- )
16
-
17
- STDOUT.write "Opening browser at #{redirect_url}\n"
18
- system 'open', redirect_url
19
-
20
- STDOUT.write 'Copy paste the code from the redirect URL: '
21
- code = gets.strip
22
-
23
- response = client.oauth_token(code: code)
24
-
25
- puts "token_type: #{response.token_type}"
26
- puts "refresh_token: #{response.refresh_token}"
27
- puts "access_token: #{response.access_token}"
28
- puts "expires_at: #{response.expires_at}"
@@ -1,59 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: get
5
- uri: https://www.strava.com/api/v3/athlete
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- Authorization:
11
- - Bearer access-token
12
- Accept:
13
- - application/json; charset=utf-8
14
- User-Agent:
15
- - Strava Ruby Client/0.1.0
16
- Accept-Encoding:
17
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
- response:
19
- status:
20
- code: 200
21
- message: OK
22
- headers:
23
- Date:
24
- - Thu, 22 Nov 2018 22:16:54 GMT
25
- Content-Type:
26
- - application/json; charset=UTF-8
27
- Transfer-Encoding:
28
- - chunked
29
- Connection:
30
- - keep-alive
31
- Cache-Control:
32
- - max-age=0, private, must-revalidate
33
- Via:
34
- - 1.1 linkerd
35
- Status:
36
- - 200 OK
37
- X-Ratelimit-Limit:
38
- - '600,30000'
39
- X-Request-Id:
40
- - 170d3e7a-ba23-4ffa-a6de-c262ed082294
41
- Etag:
42
- - W/"aec66d60b5541f026b3bdd4becd4a394"
43
- X-Ratelimit-Usage:
44
- - '1,11466'
45
- X-Frame-Options:
46
- - DENY
47
- X-Content-Type-Options:
48
- - nosniff
49
- Vary:
50
- - Origin
51
- X-Xss-Protection:
52
- - 1; mode=block
53
- body:
54
- encoding: ASCII-8BIT
55
- string: '{"id":26462176,"username":"dblockdotorg","resource_state":2,"firstname":"Daniel","lastname":"Block","city":"New
56
- York","state":"NY","country":"","sex":"M","premium":true,"summit":true,"created_at":"2017-11-28T19:05:35Z","updated_at":"2018-11-19T01:44:15Z","badge_type_id":1,"profile_medium":"https://dgalywyr863hv.cloudfront.net/pictures/athletes/26462176/7677115/2/medium.jpg","profile":"https://dgalywyr863hv.cloudfront.net/pictures/athletes/26462176/7677115/2/large.jpg","friend":null,"follower":null,"email":"dblock@example.com"}'
57
- http_version:
58
- recorded_at: Thu, 22 Nov 2018 22:16:54 GMT
59
- recorded_with: VCR 4.0.0
@@ -1,121 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: get
5
- uri: https://www.strava.com/api/v3/athlete/activities
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- Authorization:
11
- - Bearer access-token
12
- Accept:
13
- - application/json; charset=utf-8
14
- User-Agent:
15
- - Strava Ruby Client/0.1.0
16
- Accept-Encoding:
17
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
- response:
19
- status:
20
- code: 200
21
- message: OK
22
- headers:
23
- Date:
24
- - Fri, 23 Nov 2018 15:36:57 GMT
25
- Content-Type:
26
- - application/json; charset=UTF-8
27
- Transfer-Encoding:
28
- - chunked
29
- Connection:
30
- - keep-alive
31
- Cache-Control:
32
- - max-age=0, private, must-revalidate
33
- Via:
34
- - 1.1 linkerd
35
- Status:
36
- - 200 OK
37
- X-Ratelimit-Limit:
38
- - '600,30000'
39
- X-Request-Id:
40
- - 8155569b-2c01-43aa-b741-23c5f3be6ee2
41
- Etag:
42
- - W/"9c40510fd0b8764b541b21e329a7ac51"
43
- X-Ratelimit-Usage:
44
- - '89,8130'
45
- X-Frame-Options:
46
- - DENY
47
- X-Content-Type-Options:
48
- - nosniff
49
- Strava-Athlete-Upload-Version:
50
- - fd960260952cfb09201c3ff8bbcfde30
51
- Vary:
52
- - Origin
53
- X-Xss-Protection:
54
- - 1; mode=block
55
- body:
56
- encoding: UTF-8
57
- string: '[{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Central
58
- Park with L","distance":9681.1,"moving_time":3150,"elapsed_time":3150,"total_elevation_gain":105.5,"type":"Run","workout_type":0,"id":1972463847,"external_id":"18177667835.tcx","upload_id":2109231946,"start_date":"2018-11-18T16:30:45Z","start_date_local":"2018-11-18T11:30:45Z","timezone":"(GMT-05:00)
59
- America/New_York","utc_offset":-18000.0,"start_latlng":[40.77,-73.98],"end_latlng":[40.77,-73.98],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.77,"start_longitude":-73.98,"achievement_count":9,"kudos_count":7,"comment_count":0,"athlete_count":3,"photo_count":0,"map":{"id":"a1972463847","summary_polyline":"_iywFn`pbMmBgB\\uKgNwK`@aNwKgOeEcCmHd@eGwH}OeFqQ{NuDoQiYoTmLsBqHfAmLuKwLaAwFsG}@lAfAhEg@pCeMcFcG~I}@dFr@tCpDr@`CgFdJSpDxIxD~CfC`IpLtHnCdFnInBfFhMlFpC|K}@hK`L`IdApRhXvPlBzAvFvPrI|JvNxAVlIuF~At@","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.073,"max_speed":4.1,"has_heartrate":true,"average_heartrate":157.2,"max_heartrate":188.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":38.1,"elev_low":5.7,"pr_count":3,"total_photo_count":0,"has_kudoed":false,"suffer_score":93},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Central
60
- Park with L","distance":8449.8,"moving_time":3194,"elapsed_time":3201,"total_elevation_gain":74.2,"type":"Run","workout_type":0,"id":1961422138,"external_id":"18058932742.tcx","upload_id":2097849306,"start_date":"2018-11-12T22:12:47Z","start_date_local":"2018-11-12T17:12:47Z","timezone":"(GMT-05:00)
61
- America/New_York","utc_offset":-18000.0,"start_latlng":[40.77,-73.98],"end_latlng":[40.77,-73.98],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.77,"start_longitude":-73.98,"achievement_count":1,"kudos_count":3,"comment_count":0,"athlete_count":2,"photo_count":0,"map":{"id":"a1961422138","summary_polyline":"skywF`apbMd@yNmNeLXoNmMmPaD}AwG|@_HiJwQuEePmNkBaRo\\}TiSb@gNiMeLHfCnNaCjInChJvKzGnEzH~HnAxFrNjFfBvJy@|L|LrG`@|SlYxOtAbBpFdQ`JfLrNnEk@xC{E","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":2.646,"max_speed":3.4,"has_heartrate":true,"average_heartrate":137.3,"max_heartrate":167.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":37.3,"elev_low":15.0,"pr_count":0,"total_photo_count":0,"has_kudoed":false,"suffer_score":27},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Back
62
- in Central Park with Ilan","distance":5045.1,"moving_time":2064,"elapsed_time":2946,"total_elevation_gain":44.2,"type":"Run","workout_type":0,"id":1956926998,"external_id":"18015760096.tcx","upload_id":2093222580,"start_date":"2018-11-10T16:03:24Z","start_date_local":"2018-11-10T11:03:24Z","timezone":"(GMT-05:00)
63
- America/New_York","utc_offset":-18000.0,"start_latlng":[40.77,-73.98],"end_latlng":[40.78,-73.97],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.77,"start_longitude":-73.98,"achievement_count":0,"kudos_count":5,"comment_count":0,"athlete_count":1,"photo_count":0,"map":{"id":"a1956926998","summary_polyline":"gsywFtdpbM~E}GdAiIeOuL\\kN_LcOkFqBoFjAiH{JiT}BgC}G}ATOkCwJsL^iFoA{BqXuQgNa@p@xJeArH`CbIj@lQo@x@`AbCtGxDjKqAbLbMbIbAvKzM","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":2.444,"max_speed":4.5,"has_heartrate":true,"average_heartrate":123.4,"max_heartrate":164.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":37.4,"elev_low":15.0,"pr_count":0,"total_photo_count":3,"has_kudoed":false,"suffer_score":8},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"TCS
64
- NYC Marathon 2018","distance":42268.1,"moving_time":13085,"elapsed_time":13333,"total_elevation_gain":270.9,"type":"Run","workout_type":1,"id":1946417534,"external_id":"17900304917.tcx","upload_id":2082412856,"start_date":"2018-11-04T14:53:46Z","start_date_local":"2018-11-04T09:53:46Z","timezone":"(GMT-05:00)
65
- America/New_York","utc_offset":-18000.0,"start_latlng":[40.6,-74.06],"end_latlng":[40.77,-73.98],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.6,"start_longitude":-74.06,"achievement_count":7,"kudos_count":33,"comment_count":8,"athlete_count":301,"photo_count":0,"map":{"id":"a1946417534","summary_polyline":"aayvFjz_cMyu@_lDwS}VyNgI{@bCzEfGeDvIkATe{Bwq@uoDcxDqKiFmQ{Qka@g[so@i`@oIqCiI~CmPgsCucAhK{g@rj@cSaAm[yP_x@a~@se@dS_B}Nim@jG_a@wIeDrLgWqFkCoCzCgWIsGhCyL_@wIaDsFsFF_CgCiGdIiVfz@wLd[aOrj@jAsEeC}EsGcBoKqIiEe@{G}HwKeCu@iDwYmPqL_LwYeMaE}EeJHsCaM{wByuA}Qm_@oGeFwCy@wDhJsK_DeDvGmLoCEtCvFtG{J|QgDr\\zu@fh@{@`JdLtHbDwEfC\\tlB`nA|D~FjM`JhBzRdTvP~LbCvFdIlMNbP|TrGbBdJgBfG|Dw@xFoQhf@qAc@","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.17,"max_speed":5.6,"has_heartrate":true,"average_heartrate":170.1,"max_heartrate":187.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":54.7,"elev_low":-8.1,"pr_count":0,"total_photo_count":9,"has_kudoed":false,"suffer_score":656},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Dash
66
- to TFK Breakfast","distance":3161.2,"moving_time":959,"elapsed_time":973,"total_elevation_gain":28.7,"type":"Run","workout_type":0,"id":1943331548,"external_id":"17878873978.tcx","upload_id":2079194427,"start_date":"2018-11-03T13:20:58Z","start_date_local":"2018-11-03T09:20:58Z","timezone":"(GMT-05:00)
67
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.77,-73.98],"end_latlng":[40.78,-73.98],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.77,"start_longitude":-73.98,"achievement_count":2,"kudos_count":2,"comment_count":0,"athlete_count":2,"photo_count":0,"map":{"id":"a1943331548","summary_polyline":"wkywFp_pbMpIiNmBdMmFdGw@hElK{[e@q@wBvDwPgMoAoCpAiJgReTwD`@eBdXoC`E_@rEyBr@","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.296,"max_speed":3.9,"has_heartrate":true,"average_heartrate":159.6,"max_heartrate":174.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":25.7,"elev_low":14.6,"pr_count":0,"total_photo_count":2,"has_kudoed":false,"suffer_score":30},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Shake
68
- It with Rob","distance":5476.4,"moving_time":1917,"elapsed_time":1935,"total_elevation_gain":44.3,"type":"Run","workout_type":0,"id":1942082742,"external_id":"17855361691.tcx","upload_id":2077904428,"start_date":"2018-11-02T21:16:19Z","start_date_local":"2018-11-02T17:16:19Z","timezone":"(GMT-05:00)
69
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.77,-73.98],"end_latlng":[40.77,-73.98],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.77,"start_longitude":-73.98,"achievement_count":0,"kudos_count":3,"comment_count":0,"athlete_count":1,"photo_count":0,"map":{"id":"a1942082742","summary_polyline":"ywywFhdpbMaKeLvDbGnHbE|EkFlBoKeNgK{@mEfAmIeMmPkMc@{G{ImIiAe@~@zFrEuFQwL|P~MtQbJObC|AxIkKvOzEbEfGdLbIgArJnBjB","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":2.857,"max_speed":3.8,"has_heartrate":true,"average_heartrate":146.4,"max_heartrate":169.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":32.9,"elev_low":14.8,"pr_count":0,"total_photo_count":0,"has_kudoed":false,"suffer_score":30},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Final
70
- TFK Practice","distance":3968.2,"moving_time":1278,"elapsed_time":1414,"total_elevation_gain":27.8,"type":"Run","workout_type":0,"id":1938547049,"external_id":"17835067430.tcx","upload_id":2074260838,"start_date":"2018-10-31T22:53:18Z","start_date_local":"2018-10-31T18:53:18Z","timezone":"(GMT-05:00)
71
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.77,-73.98],"end_latlng":[40.77,-73.98],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.77,"start_longitude":-73.98,"achievement_count":0,"kudos_count":6,"comment_count":0,"athlete_count":23,"photo_count":0,"map":{"id":"a1938547049","summary_polyline":"{kzwFptobMbAmAjJfMtGxDjGoGfBsHi@iCiNgKbAaJu@sE_GgEyB}EsFiCuBzBrAqBhC`@`MnMtBlEqAnF\\nDhO~MuDbOyDxBeT}R","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.105,"max_speed":4.1,"has_heartrate":true,"average_heartrate":147.3,"max_heartrate":169.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":26.4,"elev_low":14.8,"pr_count":0,"total_photo_count":1,"has_kudoed":false,"suffer_score":25},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Run
72
- with Ilan","distance":3225.6,"moving_time":1442,"elapsed_time":1489,"total_elevation_gain":0.0,"type":"Run","workout_type":0,"id":1932465273,"external_id":"17769555662.tcx","upload_id":2067987957,"start_date":"2018-10-28T14:48:45Z","start_date_local":"2018-10-28T10:48:45Z","timezone":"(GMT-05:00)
73
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.75,-74.0],"end_latlng":[40.75,-74.0],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.75,"start_longitude":-74.0,"achievement_count":6,"kudos_count":4,"comment_count":0,"athlete_count":1,"photo_count":0,"map":{"id":"a1932465273","summary_polyline":"i_vwFfhtbMg@hFnAgDuAUCbEnAeD{@m@m@nCf@x@|@qCq@cAo@jDh@`@z@yC}@q@q@fDt@l@t@_Dq@c@g@~DfB}Cg@y@w@dEvBuCiA[y@dCj@~@fAwDm@]iAdDn@fAxAqD{@k@aAnCp@hAz@yE{BdCnAx@XeE","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":2.237,"max_speed":3.5,"has_heartrate":true,"average_heartrate":168.2,"max_heartrate":194.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":5.5,"elev_low":4.2,"pr_count":2,"total_photo_count":1,"has_kudoed":false,"suffer_score":66},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Last
74
- Long Run before Death at the TCS 2018 Marathon","distance":27650.7,"moving_time":8510,"elapsed_time":8619,"total_elevation_gain":160.1,"type":"Run","workout_type":0,"id":1917054256,"external_id":"8277592741780812.gpx","upload_id":2052043593,"start_date":"2018-10-20T16:39:20Z","start_date_local":"2018-10-20T12:39:20Z","timezone":"(GMT-05:00)
75
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.73,-73.98],"end_latlng":[40.74,-73.99],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.73,"start_longitude":-73.98,"achievement_count":18,"kudos_count":6,"comment_count":1,"athlete_count":1,"photo_count":0,"map":{"id":"a1917054256","summary_polyline":"o~rwFn{pbMIaCbD_KwDuEbNs^u@yBhTyNty@vInr@lTzDxFXzC_@xz@tChG`@lGoBbBdDrP^zMdF~EjCbHWnCtBbGh@jJpJ`IjCdIbMdRo@vGjAnBW`G_DFf@r@oC~GuDB{BzGMjIwAj@_BdGsAR_GmGmDdCcMmAcFmB}@_EaE}A{EhG}CkBwTaAh@gSiS_Ei}@sIwn@iAgOaGae@{GwFxDsNNiKaDgs@ge@wFyKaSwOqx@o[mCcGeb@mSsh@g\\f@}CyHmE`NtDCcKvC_Er@qIdD{EnM{a@|MdGtBKtBgDxMjOtMTrCtHdLdF`NzOrEnAvGmJVuFgMmKsA}FvByBtOQq@_Ed@pBjThDVzApJ~C`@jBxCWfDdLfIA~ZzVfIlDrAhDtAa@hKnJzj@~[","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.249,"max_speed":18.9,"has_heartrate":true,"average_heartrate":162.7,"max_heartrate":175.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":32.1,"elev_low":-19.7,"pr_count":4,"total_photo_count":0,"has_kudoed":false,"suffer_score":313},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Staten
76
- Island Half","distance":21116.8,"moving_time":5985,"elapsed_time":5985,"total_elevation_gain":92.8,"type":"Run","workout_type":1,"id":1904418549,"external_id":"17474884162.tcx","upload_id":2038985443,"start_date":"2018-10-14T12:07:56Z","start_date_local":"2018-10-14T08:07:56Z","timezone":"(GMT-05:00)
77
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.64,-74.08],"end_latlng":[40.64,-74.08],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.64,"start_longitude":-74.08,"achievement_count":3,"kudos_count":19,"comment_count":0,"athlete_count":221,"photo_count":0,"map":{"id":"a1904418549","summary_polyline":"al`wFt{bcMxO`CtRoEbU|HdLuAdTgJfd@s^bfAcs@~KnXtE|BhWgFxW_QdFlEnMjBnPlUn]`ZxUvWdTfWj]bs@~MnOeK{K{`@ex@gi@um@{^m[}PoUyMoBgFcEeNpJcNki@qGpE`AhL{CvNuG_T~RiOeDaM{LhC_MpNX`Q{j@ja@aDe@aG}MuBzA}EtOcQxYuDsAgVvSaZfE}Kf@uK}CkBiDmKl@oBdBvAlIq@r@","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.528,"max_speed":4.6,"has_heartrate":true,"average_heartrate":175.1,"max_heartrate":183.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":35.3,"elev_low":1.8,"pr_count":0,"total_photo_count":3,"has_kudoed":false,"suffer_score":364},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Unfinished
78
- Business","distance":3011.0,"moving_time":941,"elapsed_time":970,"total_elevation_gain":8.5,"type":"Run","workout_type":0,"id":1888473597,"external_id":"17273735646.tcx","upload_id":2022360788,"start_date":"2018-10-06T19:54:06Z","start_date_local":"2018-10-06T15:54:06Z","timezone":"(GMT-05:00)
79
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.71,-74.0],"end_latlng":[40.73,-73.99],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.71,"start_longitude":-74.0,"achievement_count":0,"kudos_count":3,"comment_count":0,"athlete_count":1,"photo_count":0,"map":{"id":"a1888473597","summary_polyline":"_ynwFr|tbM{IuDiCx@kB_EeBTqZkZku@}f@OcE{Am@t@wAa@kCaVwMX_D","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.2,"max_speed":4.8,"has_heartrate":true,"average_heartrate":163.9,"max_heartrate":177.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":13.4,"elev_low":4.7,"pr_count":0,"total_photo_count":0,"has_kudoed":false,"suffer_score":36},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Two
80
- Bridges","distance":13363.4,"moving_time":4395,"elapsed_time":4421,"total_elevation_gain":84.4,"type":"Run","workout_type":0,"id":1888474044,"external_id":"17273735647.tcx","upload_id":2022361157,"start_date":"2018-10-06T18:30:44Z","start_date_local":"2018-10-06T14:30:44Z","timezone":"(GMT-05:00)
81
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.73,-73.99],"end_latlng":[40.71,-74.0],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.73,"start_longitude":-73.99,"achievement_count":4,"kudos_count":5,"comment_count":1,"athlete_count":1,"photo_count":0,"map":{"id":"a1888474044","summary_polyline":"ovrwF|hqbM`FoS~BJxCqEvMga@aQiL|IwJl\\p@r`@~FfRjFdA|EnI|C}Rj{@rSihArT{_A`B^]bGrQ`CrBbF~KkCtCvBtUuZhMn@{@mOzYoDrE~z@oBxyA_LnDcAbZyVPgo@p|@","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.041,"max_speed":4.2,"has_heartrate":true,"average_heartrate":165.8,"max_heartrate":182.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":37.6,"elev_low":-0.8,"pr_count":2,"total_photo_count":0,"has_kudoed":false,"suffer_score":182},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Slow
82
- Burn","distance":8020.2,"moving_time":2839,"elapsed_time":3388,"total_elevation_gain":55.1,"type":"Run","workout_type":0,"id":1884816921,"external_id":"1612944491207599.gpx","upload_id":2018591009,"start_date":"2018-10-05T00:14:28Z","start_date_local":"2018-10-04T20:14:28Z","timezone":"(GMT-05:00)
83
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.76,-73.98],"end_latlng":[40.77,-73.97],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.76,"start_longitude":-73.98,"achievement_count":0,"kudos_count":5,"comment_count":0,"athlete_count":1,"photo_count":0,"map":{"id":"a1884816921","summary_polyline":"{bwwFt~pbMuhCy~@cTe[iIqA_DoFg^}JuCsHvB_MYqWlBiAvJdAdZ|P~BnOlBlDfRtNpMvBvFhJzCKnCgDhK`OjDjBfDnHhEjArJwB","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":2.825,"max_speed":4.7,"has_heartrate":true,"average_heartrate":166.4,"max_heartrate":177.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":37.0,"elev_low":14.9,"pr_count":0,"total_photo_count":0,"has_kudoed":false,"suffer_score":121},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Bronx
84
- 10M","distance":16227.6,"moving_time":4515,"elapsed_time":4515,"total_elevation_gain":93.5,"type":"Run","workout_type":1,"id":1875527224,"external_id":"17179620217.tcx","upload_id":2009044310,"start_date":"2018-09-30T12:17:07Z","start_date_local":"2018-09-30T08:17:07Z","timezone":"(GMT-05:00)
85
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.83,-73.92],"end_latlng":[40.83,-73.93],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.83,"start_longitude":-73.92,"achievement_count":3,"kudos_count":18,"comment_count":2,"athlete_count":296,"photo_count":0,"map":{"id":"a1875527224","summary_polyline":"ewexF|rdbMaOsIcd@}`@mc@iM{Um[ye@y^sq@k\\og@k^wQ{Yyi@kR{JbL}C~AeA_A|KmF`CmDxUcKbb@oIir@tTrg@rShNpVbk@|a@ns@`^jf@d_@`KdRhE~Czc@~Lbg@`d@p`@xQhBnBoErV","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.594,"max_speed":4.8,"has_heartrate":true,"average_heartrate":174.5,"max_heartrate":187.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":47.0,"elev_low":6.5,"pr_count":0,"total_photo_count":3,"has_kudoed":false,"suffer_score":260},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Revenge
86
- on Central Park","distance":22732.6,"moving_time":7148,"elapsed_time":7294,"total_elevation_gain":198.7,"type":"Run","workout_type":2,"id":1870132397,"external_id":"7083999924361706.gpx","upload_id":2003403893,"start_date":"2018-09-27T22:02:14Z","start_date_local":"2018-09-27T18:02:14Z","timezone":"(GMT-05:00)
87
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.73,-73.99],"end_latlng":[40.77,-73.98],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.73,"start_longitude":-73.99,"achievement_count":4,"kudos_count":9,"comment_count":0,"athlete_count":1,"photo_count":0,"map":{"id":"a1870132397","summary_polyline":"mwrwFdgqbMmDiDDoDyIkHkwColBsDrFyG`T}MjToSdB{CkAuOyTcMM_G_JaPqDqN_LmDsHKeLsVkLLkAkGmEkRl@mNuMiLm@_FgHaBlAxApFw@jCwLqGmFnHmAnI|@bC~BFtByEpKQxCrInEhCfDfKtJfFtDlGxHhApCpJzDzDtE|AnIgAvJ|KhJdAfSjY`PrAxBtGjOvHpK~MfE^pGeJSaHkMmKS{PsJqLaEgBwHTwF{HuPoEeQqOyA}Pg]aVyLaA_FrAuNaMiLl@dDnMqCbInCnJ~MhJxBnE|HbBjHjOnDtArK{@dKdLzHl@hSfYbPtApCxG|OrIdLpNrF{@~GsM","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.18,"max_speed":22.3,"has_heartrate":true,"average_heartrate":166.6,"max_heartrate":181.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":37.0,"elev_low":5.0,"pr_count":3,"total_photo_count":0,"has_kudoed":false,"suffer_score":310},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Back
88
- in the Saddle","distance":15110.6,"moving_time":4417,"elapsed_time":4417,"total_elevation_gain":32.0,"type":"Run","workout_type":0,"id":1861817097,"external_id":"17028948957.tcx","upload_id":1994874138,"start_date":"2018-09-23T20:37:24Z","start_date_local":"2018-09-23T16:37:24Z","timezone":"(GMT-05:00)
89
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.73,-73.99],"end_latlng":[40.74,-73.99],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.73,"start_longitude":-73.99,"achievement_count":22,"kudos_count":8,"comment_count":0,"athlete_count":1,"photo_count":0,"map":{"id":"a1861817097","summary_polyline":"mwrwFriqbM?yAyDgDRaEdEaKuGkIdBsKnCiEzCyO|EUxMuNn_AlKjm@hS~DrGKx{@|CbJ]lGhEfi@~B|KdEtChD`NpMpPn@zKxANsBfDxK|SXjHwDbFsIj@]rM_E~Cf@tAqBfCqHqGyBhDqWcDGmF_Ce@iC?gDhEaZaD\\qRoA_B}mAeNyn@s@a\\yIt@wEaBkCvDuJBkE|CsDlJuZmAkD`AuEjCoHvBb@rKm\\aHeC","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.421,"max_speed":4.9,"has_heartrate":true,"average_heartrate":170.3,"max_heartrate":179.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":12.2,"elev_low":-3.6,"pr_count":16,"total_photo_count":0,"has_kudoed":false,"suffer_score":225},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"TCSNYCMarathonTraining
90
- 18M","distance":29735.9,"moving_time":10645,"elapsed_time":11519,"total_elevation_gain":294.0,"type":"Run","workout_type":1,"id":1845907424,"external_id":"6051605617006620
91
- (1).gpx","upload_id":1978331068,"start_date":"2018-09-16T11:01:18Z","start_date_local":"2018-09-16T07:01:18Z","timezone":"(GMT-05:00)
92
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.79,-73.96],"end_latlng":[40.79,-73.96],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.79,"start_longitude":-73.96,"achievement_count":2,"kudos_count":10,"comment_count":2,"athlete_count":86,"photo_count":0,"map":{"id":"a1845907424","summary_polyline":"km~wF`jkbMuFaAaEoG}A`BzAxFiArB_MmGmEvFeArLhCtCnEuGjJBlCfInE~CfDxJjJdFhE~GbHbAhGtNpFzB`Lw@fItK|Ix@nRfYdQdBjDrHnLnFvO~P|D_AxEwJW{F}MeK`@qM}K{O_FoBcHv@cGaJwO}DgQ}NoAmEEoIcBuCgY}QcL_BmHxAuLyLqLu@}FeHsAdArA|G}@zAiIkFmEZ{CxFo@tK|CzBvC{F~JOtN|WvKpHdEbGrHlBhIhOrP^dJdKtJzAlQfXfQxAnChHjNbHvLvN`Ed@nGsJb@wEs@kBiNwIWeFnA_D_AoFwgAqz@g@eG}ZwSuLmBaHnBiMmMkL{@yF}GkAjArAzGmAlBuHwFgEF{C`Gw@rK~CvBlDeHfJM~ChIxExDbBxHdN|I|BxEbHjAjJtQlR`@tIrKbHn@hUrYtMD|ClIzOtHnKlNlFMdFeK{@eG_NyJl@uNgFoDyB_G{FqD}Hl@}EoHsP_EwGsHqEcBsCyDe@kNuDaEoZoRqQz@aNkMoJWu@fC","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":2.581,"max_speed":5.2,"has_heartrate":true,"average_heartrate":162.4,"max_heartrate":188.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":37.0,"elev_low":6.0,"pr_count":1,"total_photo_count":1,"has_kudoed":false,"suffer_score":414},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"September
93
- 11","distance":11510.3,"moving_time":3769,"elapsed_time":3870,"total_elevation_gain":33.3,"type":"Run","workout_type":0,"id":1835710357,"external_id":"16789586516.tcx","upload_id":1967819200,"start_date":"2018-09-11T23:28:56Z","start_date_local":"2018-09-11T19:28:56Z","timezone":"(GMT-05:00)
94
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.73,-73.98],"end_latlng":[40.74,-74.0],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.73,"start_longitude":-73.98,"achievement_count":3,"kudos_count":7,"comment_count":0,"athlete_count":1,"photo_count":0,"map":{"id":"a1835710357","summary_polyline":"yrrwFpcqbM|u@fe@xVvJ|@kBjJdDBlCzLjGg@lEpKrGt[aFbEhQnGrH~AdKzGnGvFbOhKbNhBnVgC^MtDuBbDcONkBnBiG}JmJb@wGxTOfF{HmBJ_FmFuAeAf@_@zEk]kDfA_UsqAkN_o@_B}QeFRiAoC}EbFcHzBmHE}HtEyG","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.054,"max_speed":3.9,"has_heartrate":true,"average_heartrate":164.3,"max_heartrate":175.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":14.9,"elev_low":-3.6,"pr_count":0,"total_photo_count":0,"has_kudoed":false,"suffer_score":147},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Sunset
95
- in Paris","distance":16217.2,"moving_time":4956,"elapsed_time":4961,"total_elevation_gain":261.1,"type":"Run","workout_type":0,"id":1815133429,"external_id":"16590818329.tcx","upload_id":1946632754,"start_date":"2018-09-02T16:29:26Z","start_date_local":"2018-09-02T18:29:26Z","timezone":"(GMT+01:00)
96
- Europe/Paris","utc_offset":7200.0,"start_latlng":[48.86,2.36],"end_latlng":[48.86,2.36],"location_city":null,"location_state":null,"location_country":"","start_latitude":48.86,"start_longitude":2.36,"achievement_count":2,"kudos_count":8,"comment_count":0,"athlete_count":1,"photo_count":0,"map":{"id":"a1815133429","summary_polyline":"asfiHm`lM`JnNrd@|^l@zBo@vDtLid@jDpA|FeQtDU~CvSeB`FzDkSvU{[yBxAFrCaEbLuObZsXlgAqVlf@uArTm^leBLpY`Ad@}@b@lAjgAZzAfO`BpAxQvCnE_CnDgBcBkEtAkCqGqBw@aBsL_CknBjO{z@zIgX`EcXVmJmG{C~@}QzA}OzOav@gGyCQ}BmYwXkJuN}DhG^fBxEy@xDqM{CqFmBdD","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.272,"max_speed":4.1,"has_heartrate":true,"average_heartrate":167.2,"max_heartrate":176.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":56.7,"elev_low":24.0,"pr_count":1,"total_photo_count":1,"has_kudoed":false,"suffer_score":219},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"#NB5thAveMile
97
- to Jim Morrison’s Grave","distance":2714.2,"moving_time":1012,"elapsed_time":2883,"total_elevation_gain":33.4,"type":"Run","workout_type":1,"id":1814549396,"external_id":"16588927458.tcx","upload_id":1946025739,"start_date":"2018-09-01T10:01:39Z","start_date_local":"2018-09-01T12:01:39Z","timezone":"(GMT+01:00)
98
- Europe/Paris","utc_offset":7200.0,"start_latlng":[48.86,2.36],"end_latlng":[48.86,2.39],"location_city":null,"location_state":null,"location_country":"","start_latitude":48.86,"start_longitude":2.36,"achievement_count":0,"kudos_count":5,"comment_count":0,"athlete_count":1,"photo_count":0,"map":{"id":"a1814549396","summary_polyline":"krfiHyalMu@gAxC_LlDqGvBUb@sKjBuA_Jif@pAmBmD_HlCvF~@m@_DgJpAiEoIuUH{QvB{FImH|AkFbGgCVoHfD{BaBuLdDiCtAZn@xCiC[x@mFzB^pA{Cx@rB","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3372292","from_accepted_tag":false,"average_speed":0.941,"max_speed":4.0,"has_heartrate":true,"average_heartrate":136.1,"max_heartrate":151.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":78.0,"elev_low":43.0,"pr_count":0,"total_photo_count":2,"has_kudoed":false,"suffer_score":8},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Jog
99
- to the Louvre w/Veronica","distance":4505.8,"moving_time":1707,"elapsed_time":1859,"total_elevation_gain":105.2,"type":"Run","workout_type":0,"id":1814549379,"external_id":"16588927457.tcx","upload_id":1946025771,"start_date":"2018-08-31T09:43:12Z","start_date_local":"2018-08-31T11:43:12Z","timezone":"(GMT+01:00)
100
- Europe/Paris","utc_offset":7200.0,"start_latlng":[48.86,2.36],"end_latlng":[48.86,2.35],"location_city":null,"location_state":null,"location_country":"","start_latitude":48.86,"start_longitude":2.36,"achievement_count":0,"kudos_count":1,"comment_count":0,"athlete_count":2,"photo_count":0,"map":{"id":"a1814549379","summary_polyline":"qrfiHg`lMnI`Mh\\l\\dHrCaCzJcDM{DdRYxCnBrAaF~Vj@|AmD`[{FcBwBfDmDvRyBaEg@}HhJgVN_FpCmIiDoFnAoO}@iGjFgV","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3372292","from_accepted_tag":false,"average_speed":2.64,"max_speed":3.6,"has_heartrate":true,"average_heartrate":134.5,"max_heartrate":155.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":57.0,"elev_low":28.0,"pr_count":0,"total_photo_count":0,"has_kudoed":false,"suffer_score":10},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Steak
101
- au Poivre, Paris 1","distance":7420.3,"moving_time":2206,"elapsed_time":2247,"total_elevation_gain":154.6,"type":"Run","workout_type":0,"id":1807186864,"external_id":"16511462429.tcx","upload_id":1938461612,"start_date":"2018-08-30T10:00:44Z","start_date_local":"2018-08-30T12:00:44Z","timezone":"(GMT+01:00)
102
- Europe/Paris","utc_offset":7200.0,"start_latlng":[48.86,2.36],"end_latlng":[48.86,2.36],"location_city":null,"location_state":null,"location_country":"","start_latitude":48.86,"start_longitude":2.36,"achievement_count":0,"kudos_count":5,"comment_count":0,"athlete_count":1,"photo_count":0,"map":{"id":"a1807186864","summary_polyline":"qqfiHs_lMbSfVtZjXuQfbAsDlb@eHzd@}Rn{@c@q@hOst@oDuDTuBlDiMnHsChGmr@pJ}g@zHeXaMwGgVuXoF{BgCmH}@T","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3372292","from_accepted_tag":false,"average_speed":3.364,"max_speed":4.3,"has_heartrate":true,"average_heartrate":166.7,"max_heartrate":182.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":56.8,"elev_low":26.6,"pr_count":0,"total_photo_count":2,"has_kudoed":false,"suffer_score":95},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Waking
103
- up in Amsterdam","distance":3197.5,"moving_time":1233,"elapsed_time":1256,"total_elevation_gain":12.6,"type":"Run","workout_type":0,"id":1802519799,"external_id":"16469104195.tcx","upload_id":1933681629,"start_date":"2018-08-28T09:07:14Z","start_date_local":"2018-08-28T11:07:14Z","timezone":"(GMT+01:00)
104
- Europe/Amsterdam","utc_offset":7200.0,"start_latlng":[52.36,4.87],"end_latlng":[52.36,4.87],"location_city":null,"location_state":null,"location_country":"","start_latitude":52.36,"start_longitude":4.87,"achievement_count":0,"kudos_count":2,"comment_count":0,"athlete_count":2,"photo_count":0,"map":{"id":"a1802519799","summary_polyline":"ysq~Hgdv\\c@eFlCmFeBoC{@mI|AiEvI~HpLlp@xBb^_DvIy@`JyEyZz@iKr@qAnA`D}DbFs@yBoHaa@","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3372292","from_accepted_tag":false,"average_speed":2.593,"max_speed":3.5,"has_heartrate":true,"average_heartrate":131.9,"max_heartrate":144.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":7.0,"elev_low":-1.9,"pr_count":0,"total_photo_count":1,"has_kudoed":false,"suffer_score":6},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Berlin
105
- 3, Hasenheide Park with Veronica","distance":3498.5,"moving_time":1326,"elapsed_time":1393,"total_elevation_gain":26.1,"type":"Run","workout_type":0,"id":1798000742,"external_id":"16432690640.tcx","upload_id":1929039813,"start_date":"2018-08-26T08:18:47Z","start_date_local":"2018-08-26T10:18:47Z","timezone":"(GMT+01:00)
106
- Europe/Berlin","utc_offset":7200.0,"start_latlng":[52.48,13.43],"end_latlng":[52.49,13.42],"location_city":null,"location_state":null,"location_country":"","start_latitude":52.48,"start_longitude":13.43,"achievement_count":1,"kudos_count":4,"comment_count":0,"athlete_count":2,"photo_count":0,"map":{"id":"a1798000742","summary_polyline":"e}i_Imz}pA`@t@qJhUj@|AcF~Wt@bLzEnBwAtQ|TgCrEcVE_C}UqAeClUjIrDtB}LUsKkG{@kCxLqEw@","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3372292","from_accepted_tag":false,"average_speed":2.638,"max_speed":4.0,"has_heartrate":true,"average_heartrate":132.3,"max_heartrate":149.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":55.0,"elev_low":39.0,"pr_count":0,"total_photo_count":0,"has_kudoed":false,"suffer_score":6},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Berlin
107
- 2","distance":16244.6,"moving_time":5005,"elapsed_time":5005,"total_elevation_gain":109.8,"type":"Run","workout_type":0,"id":1795666854,"external_id":"16409473391.tcx","upload_id":1926641043,"start_date":"2018-08-25T07:34:19Z","start_date_local":"2018-08-25T09:34:19Z","timezone":"(GMT+01:00)
108
- Europe/Berlin","utc_offset":7200.0,"start_latlng":[52.49,13.43],"end_latlng":[52.49,13.43],"location_city":null,"location_state":null,"location_country":"","start_latitude":52.49,"start_longitude":13.43,"achievement_count":3,"kudos_count":3,"comment_count":0,"athlete_count":1,"photo_count":0,"map":{"id":"a1795666854","summary_polyline":"{hj_Iqz}pAc[\\lh@?ePnm@LxNlNpJ|IjBv@`JbJu@yL|jAbRdI[z]jAvLrGxJnVnN~Ju@zH_G~@gHyA_cCcAmTkDyC}PnE~FrhDzKqC|EqHwB_wCy[pCgL{AoBtKnBnOiP|[oFgA~Hkm@qAsF|BgUqCqCcKz@yLaCqEfFeC{@[sGvA{NhMk^cJcAZsErBtC","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3372292","from_accepted_tag":false,"average_speed":3.246,"max_speed":4.1,"has_heartrate":true,"average_heartrate":167.6,"max_heartrate":177.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":56.0,"elev_low":34.0,"pr_count":1,"total_photo_count":1,"has_kudoed":false,"suffer_score":225},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Berlin
109
- 1","distance":11723.7,"moving_time":3570,"elapsed_time":3671,"total_elevation_gain":86.6,"type":"Run","workout_type":0,"id":1791365082,"external_id":"16365739967.tcx","upload_id":1922194153,"start_date":"2018-08-23T04:49:41Z","start_date_local":"2018-08-23T06:49:41Z","timezone":"(GMT+01:00)
110
- Europe/Berlin","utc_offset":7200.0,"start_latlng":[52.48,13.43],"end_latlng":[52.49,13.43],"location_city":null,"location_state":null,"location_country":"","start_latitude":52.48,"start_longitude":13.43,"achievement_count":0,"kudos_count":4,"comment_count":0,"athlete_count":1,"photo_count":0,"map":{"id":"a1791365082","summary_polyline":"i|i_Iaz}pAeOzi@XdSrE`E{@hQta@oDuG`j@~EfBy@g@YvG{@M@wGwBxCyGpl@mNuBo@|g@sMxATypBrB{HpHcBbEec@`UjAd@}DmA{UlWoHDmMdBkBuEws@zJ}InNmDnHmFrVyAyU`C{a@hRqUtXqMv_@dEWyKi@","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3372292","from_accepted_tag":false,"average_speed":3.284,"max_speed":4.3,"has_heartrate":true,"average_heartrate":161.5,"max_heartrate":181.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":61.1,"elev_low":39.0,"pr_count":0,"total_photo_count":1,"has_kudoed":false,"suffer_score":124},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Flight
111
- to Berlin Warmup","distance":5827.4,"moving_time":1642,"elapsed_time":1645,"total_elevation_gain":35.2,"type":"Run","workout_type":0,"id":1787324494,"external_id":"16319438595.tcx","upload_id":1918060247,"start_date":"2018-08-21T12:03:43Z","start_date_local":"2018-08-21T08:03:43Z","timezone":"(GMT-05:00)
112
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.74,-73.98],"end_latlng":[40.74,-73.99],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.74,"start_longitude":-73.98,"achievement_count":0,"kudos_count":4,"comment_count":0,"athlete_count":1,"photo_count":0,"map":{"id":"a1787324494","summary_polyline":"ycswFtvpbMwAqAzFuLtK{`@}C{@aNtCsGcCwPCcA{HkHTa@_CyFtBuAqHiBTaAyCmPoMfUvPeDxCd@vE{FxLqCrLpFvFqAtGfBx@y@~HyEdJ`KnGyCrBa@dCfRrOdTxC","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.549,"max_speed":4.7,"has_heartrate":true,"average_heartrate":159.9,"max_heartrate":171.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":14.1,"elev_low":-7.5,"pr_count":0,"total_photo_count":0,"has_kudoed":false,"suffer_score":57},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"BK
113
- Equinox Is Hottttt","distance":7129.1,"moving_time":2252,"elapsed_time":2252,"total_elevation_gain":26.6,"type":"Run","workout_type":0,"id":1775222127,"external_id":"16217957932.tcx","upload_id":1905578194,"start_date":"2018-08-15T23:50:19Z","start_date_local":"2018-08-15T19:50:19Z","timezone":"(GMT-05:00)
114
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.68,-73.92],"end_latlng":[40.72,-73.96],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.68,"start_longitude":-73.92,"achievement_count":1,"kudos_count":4,"comment_count":1,"athlete_count":1,"photo_count":0,"map":{"id":"a1775222127","summary_polyline":"yyhwFz}cbMjHftAtDtkBo@~\\{yBbZ_l@zk@uSiCsXgNmFwF","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.166,"max_speed":4.1,"has_heartrate":true,"average_heartrate":166.9,"max_heartrate":182.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":20.1,"elev_low":2.9,"pr_count":0,"total_photo_count":0,"has_kudoed":false,"suffer_score":100},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"TCSNYCMarathonTraining
115
- 15M","distance":25195.7,"moving_time":7876,"elapsed_time":7879,"total_elevation_gain":162.5,"type":"Run","workout_type":1,"id":1767296035,"external_id":"16129954357.tcx","upload_id":1897398512,"start_date":"2018-08-12T11:07:02Z","start_date_local":"2018-08-12T07:07:02Z","timezone":"(GMT-05:00)
116
- America/New_York","utc_offset":-14400.0,"start_latlng":[40.79,-73.96],"end_latlng":[40.79,-73.96],"location_city":null,"location_state":null,"location_country":"","start_latitude":40.79,"start_longitude":-73.96,"achievement_count":25,"kudos_count":9,"comment_count":0,"athlete_count":90,"photo_count":0,"map":{"id":"a1767296035","summary_polyline":"us}wFjxkbMsFqAcJwJuLs@qEyGkAjB~@zFi@zAgJmFsD`@kCxEgAbL|CnClDgH~IGvOjZbLxGtCrFlHjAbHxOjFjBnK_A`JzKnKhClRxWbPrBnDwG|A_XoCA{GcJeOuDuFkG_HwC{C}IQoJs^cVmQx@mNkMmMmAuDgGcBxAtAnFu@fCiJcGqEv@wDlQfDnDfD{GtI]fEfJ|DbC|D|KnIlE|EhHtGx@jHfOhG|BtHoAtKhL~IpAhRlXfRvCjDkGjA_XqDa@_FiIqO{DgPyLyB_EDyJiBuDc\\{SuJk@kEhBcNuLiD[","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.198,"max_speed":4.3,"has_heartrate":true,"average_heartrate":168.8,"max_heartrate":187.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":37.0,"elev_low":6.0,"pr_count":10,"total_photo_count":2,"has_kudoed":false,"suffer_score":373},{"resource_state":2,"athlete":{"id":26462176,"resource_state":1},"name":"Martha’s
117
- Vineyard 2","distance":10265.6,"moving_time":3193,"elapsed_time":3200,"total_elevation_gain":27.0,"type":"Run","workout_type":0,"id":1758181483,"external_id":"16048698588.tcx","upload_id":1887763550,"start_date":"2018-08-08T10:58:49Z","start_date_local":"2018-08-08T06:58:49Z","timezone":"(GMT-05:00)
118
- America/New_York","utc_offset":-14400.0,"start_latlng":[41.38,-70.53],"end_latlng":[41.38,-70.53],"location_city":null,"location_state":null,"location_country":"","start_latitude":41.38,"start_longitude":-70.53,"achievement_count":0,"kudos_count":4,"comment_count":0,"athlete_count":1,"photo_count":0,"map":{"id":"a1758181483","summary_polyline":"c`q{F`knmLeBeUmIaY}JeRzAsC`b@eOpYaPfUjCti@qGzs@i\\pCz@|EtO`NtC}MyCqEyOiCaAus@r[yk@`HcKwC_HTkXnOy_@tMgFlDhJ~OlLj_@v@dR","resource_state":2},"trainer":false,"commute":false,"manual":false,"private":false,"visibility":"everyone","flagged":false,"gear_id":"g3423618","from_accepted_tag":false,"average_speed":3.215,"max_speed":4.0,"has_heartrate":true,"average_heartrate":166.5,"max_heartrate":179.0,"heartrate_opt_out":false,"display_hide_heartrate_option":false,"elev_high":10.0,"elev_low":-0.3,"pr_count":0,"total_photo_count":2,"has_kudoed":false,"suffer_score":138}]'
119
- http_version:
120
- recorded_at: Fri, 23 Nov 2018 15:36:57 GMT
121
- recorded_with: VCR 4.0.0
@@ -1,53 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: post
5
- uri: https://www.strava.com/oauth/token
6
- body:
7
- encoding: UTF-8
8
- string: client_id=12345&client_secret=secret&code=deadbeef585a6edb1f00309d3e1e0fec74973fb0&grant_type=authorization_code&token
9
- headers:
10
- Accept:
11
- - application/json; charset=utf-8
12
- User-Agent:
13
- - Strava Ruby Client/0.1.0
14
- Content-Type:
15
- - application/x-www-form-urlencoded
16
- Accept-Encoding:
17
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
- response:
19
- status:
20
- code: 200
21
- message: OK
22
- headers:
23
- Date:
24
- - Thu, 22 Nov 2018 20:29:59 GMT
25
- Content-Type:
26
- - application/json; charset=UTF-8
27
- Transfer-Encoding:
28
- - chunked
29
- Connection:
30
- - keep-alive
31
- Cache-Control:
32
- - max-age=0, private, must-revalidate
33
- Via:
34
- - 1.1 linkerd
35
- Status:
36
- - 200 OK
37
- X-Request-Id:
38
- - bd4a7ae2-d65e-4f94-bc0f-f01095da297c
39
- Etag:
40
- - W/"46fcdd016c51d7e953514dfcdb131e2c"
41
- X-Frame-Options:
42
- - SAMEORIGIN,DENY
43
- X-Content-Type-Options:
44
- - nosniff
45
- X-Xss-Protection:
46
- - 1; mode=block
47
- body:
48
- encoding: ASCII-8BIT
49
- string: '{"token_type":"Bearer","expires_at":1542940199,"expires_in":21600,"refresh_token":"deadbeef9d64b225d0c50db4854a8d6c8757702d","access_token":"deadbeefd7ab44704fb2a146bd98c7a349a2b43d","athlete":{"id":12342176,"username":"dblockdotorg","resource_state":2,"firstname":"Daniel","lastname":"Block","city":"New
50
- York","state":"NY","country":"","sex":"M","premium":true,"summit":true,"created_at":"2017-11-28T19:05:35Z","updated_at":"2018-11-19T01:44:15Z","badge_type_id":1,"profile_medium":"https://dgalywyr863hv.cloudfront.net/pictures/athletes/26462176/7677115/2/medium.jpg","profile":"https://dgalywyr863hv.cloudfront.net/pictures/athletes/26462176/7677115/2/large.jpg","friend":null,"follower":null,"email":"dblock@example.com"}}'
51
- http_version:
52
- recorded_at: Thu, 22 Nov 2018 20:29:59 GMT
53
- recorded_with: VCR 4.0.0
@@ -1,50 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: post
5
- uri: https://www.strava.com/oauth/token
6
- body:
7
- encoding: UTF-8
8
- string: client_id=client-id&client_secret=client-secret&code=code&grant_type=authorization_code&token
9
- headers:
10
- Accept:
11
- - application/json; charset=utf-8
12
- User-Agent:
13
- - Strava Ruby Client/0.1.0
14
- Content-Type:
15
- - application/x-www-form-urlencoded
16
- Accept-Encoding:
17
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
- response:
19
- status:
20
- code: 400
21
- message: Bad Request
22
- headers:
23
- Date:
24
- - Thu, 22 Nov 2018 20:16:41 GMT
25
- Content-Type:
26
- - application/json; charset=UTF-8
27
- Transfer-Encoding:
28
- - chunked
29
- Connection:
30
- - keep-alive
31
- Cache-Control:
32
- - no-cache
33
- Via:
34
- - 1.1 linkerd
35
- Status:
36
- - 400 Bad Request
37
- X-Request-Id:
38
- - 168ffeae-9029-4aec-bd50-3a0430e594bd
39
- X-Frame-Options:
40
- - SAMEORIGIN,DENY
41
- X-Content-Type-Options:
42
- - nosniff
43
- X-Xss-Protection:
44
- - 1; mode=block
45
- body:
46
- encoding: ASCII-8BIT
47
- string: '{"message":"Bad Request","errors":[{"resource":"Application","field":"client_id","code":"invalid"}]}'
48
- http_version:
49
- recorded_at: Thu, 22 Nov 2018 20:16:41 GMT
50
- recorded_with: VCR 4.0.0
@@ -1,50 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: post
5
- uri: https://www.strava.com/oauth/token
6
- body:
7
- encoding: UTF-8
8
- string: client_id=12345&client_secret=client-secret&code=code&grant_type=authorization_code&token
9
- headers:
10
- Accept:
11
- - application/json; charset=utf-8
12
- User-Agent:
13
- - Strava Ruby Client/0.1.0
14
- Content-Type:
15
- - application/x-www-form-urlencoded
16
- Accept-Encoding:
17
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
- response:
19
- status:
20
- code: 400
21
- message: Bad Request
22
- headers:
23
- Date:
24
- - Thu, 22 Nov 2018 20:26:56 GMT
25
- Content-Type:
26
- - application/json; charset=UTF-8
27
- Transfer-Encoding:
28
- - chunked
29
- Connection:
30
- - keep-alive
31
- Cache-Control:
32
- - no-cache
33
- Via:
34
- - 1.1 linkerd
35
- Status:
36
- - 400 Bad Request
37
- X-Request-Id:
38
- - d3406a4e-9099-400f-b709-aad0ea2768fe
39
- X-Frame-Options:
40
- - SAMEORIGIN,DENY
41
- X-Content-Type-Options:
42
- - nosniff
43
- X-Xss-Protection:
44
- - 1; mode=block
45
- body:
46
- encoding: ASCII-8BIT
47
- string: '{"message":"Bad Request","errors":[{"resource":"RequestToken","field":"code","code":"invalid"}]}'
48
- http_version:
49
- recorded_at: Thu, 22 Nov 2018 20:26:56 GMT
50
- recorded_with: VCR 4.0.0