Matt23

Strava Segments with TOP10 score

Jul 14th, 2018
333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.01 KB | None | 0 0
  1. import json
  2. import requests
  3. import sys
  4.  
  5. access_token = ''
  6. headers = {'Authorization' : 'Bearer ' + access_token}
  7.  
  8.  
  9. def build_api_url(resource, param=None):
  10.     api_root = 'https://www.strava.com/api/v3'
  11.  
  12.     if param is not None:
  13.         resource = resource.format(param)
  14.  
  15.     return api_root + resource
  16.  
  17.  
  18. def callApi(resource, path_param, query_params={}):
  19.     url = build_api_url(resource, path_param)
  20.     r = requests.get(url, headers=headers, params=query_params)
  21.     if r.status_code != 200:
  22.         print(r.json())
  23.         sys.exit()
  24.  
  25.     return r.json()
  26.  
  27.  
  28. def get_athlete_name():
  29.     athlete = callApi('/athlete', None)
  30.     return athlete['firstname'] + ' ' + athlete['lastname'][:1] + '.'
  31.  
  32.  
  33. def get_athlete_activities():
  34.     all_activities = set()
  35.     page = 1
  36.     while True:
  37.         activities = callApi('/athlete/activities', None, {'page' : page})
  38.         if len(activities) == 0:
  39.             break
  40.  
  41.         for activity in activities:
  42.             all_activities.add(activity['id'])
  43.  
  44.         page += 1
  45.  
  46.     return all_activities
  47.  
  48.  
  49. def get_activity_by_id(id):
  50.     activity = callApi('/activities/{}', id, {'include_all_efforts' : 'True'})
  51.     return activity
  52.  
  53.  
  54. def get_ids_of_segments_in_activity(id):
  55.     segments = set()
  56.     activity = get_activity_by_id(id)
  57.     upper_limit = activity['achievement_count']
  58.     if upper_limit == 0:
  59.         return segments
  60.  
  61.     for effort in activity['segment_efforts']:
  62.         if upper_limit == 0:
  63.             break
  64.         if effort['kom_rank'] is not None:
  65.             segments.add(effort['segment']['id'])
  66.             upper_limit -= 1
  67.  
  68.     return segments
  69.  
  70.  
  71. def get_leaderboard_by_segment_id(id):
  72.     return callApi('/segments/{}/leaderboard', id)
  73.  
  74.  
  75. unique_segments = set()
  76. activities = get_athlete_activities()
  77. for activity in activities:
  78.     segments = get_ids_of_segments_in_activity(activity)
  79.     unique_segments |= segments
  80.  
  81. athlete_name = get_athlete_name()
  82. for segment in unique_segments:
  83.     leaderboard = get_leaderboard_by_segment_id(segment)
  84.     for entry in leaderboard['entries']:
  85.         if entry['athlete_name'] == athlete_name:
  86.             if entry['rank'] <= 10:
  87.                 print(segment, entry['rank'])
  88.             break
Advertisement
Add Comment
Please, Sign In to add comment