def get_ride_info(offset=0): allrides = geturl("http://www.strava.com/api/v1/rides?athleteId=%s&offset=%s" % (aid, offset), cache=False) rideinfo = [] for r in allrides['rides']: print "Processing %s" % r['name'] rid = r['id'] #meta = geturl("http://app.strava.com/api/v1/rides/%s" % rid) try: info = geturl("http://app.strava.com/api/v1/streams/%s" % rid) except StravaError, e: print "Error: %s" % e continue latlng = [x for x in info['latlng'] if x != [0.0, 0.0]] rideinfo.append( {'latlng': latlng, 'name': r['name'], 'other': r, })
def get_ride_infos(): allrides = geturl("http://www.strava.com/api/v1/rides?athleteId=%s" % myid(), cache=False) rides = [] for r in allrides['rides']: rid = r['id'] info = geturl("http://www.strava.com/api/v1/rides/%s" % rid) sortables = {} sortables['name'] = info['ride']['name'] sortables['averageSpeed'] = info['ride']['averageSpeed'] * (_m/_sec) sortables['maximumSpeed'] = info['ride']['maximumSpeed'] * (_m/_hour) sortables['distance'] = info['ride']['distance'] * _m sortables['movingTime'] = (info['ride']['movingTime'] * _sec).asUnit(_hour) if info['ride']['averageWatts'] is None: sortables['averageWatts'] = -1 * _watt else: sortables['averageWatts'] = info['ride']['averageWatts'] * _watt sortables['elevationGain'] = info['ride']['elevationGain'] * _m rides.append( sortables) return rides
def _get_ride_infos(aid, offset = 0): allrides = geturl("http://www.strava.com/api/v1/rides?athleteId=%s&offset=%d" % (aid, offset), cache=False) rides = [] for r in allrides['rides']: rid = r['id'] info = geturl("http://www.strava.com/api/v1/rides/%s" % rid) sortables = {} when = datetime.datetime.strptime(info['ride']['startDate'].partition("Z")[0], '%Y-%m-%dT%H:%M:%S') sortables['startDate'] = when sortables['name'] = info['ride']['name'] sortables['averageSpeed'] = info['ride']['averageSpeed'] * (_m/_sec) sortables['maximumSpeed'] = info['ride']['maximumSpeed'] * (_m/_hour) sortables['distance'] = info['ride']['distance'] * _m sortables['movingTime'] = (info['ride']['movingTime'] * _sec).asUnit(_hour) if info['ride']['averageWatts'] is None: sortables['averageWatts'] = -1 * _watt else: sortables['averageWatts'] = info['ride']['averageWatts'] * _watt sortables['elevationGain'] = info['ride']['elevationGain'] * _m rides.append( sortables) stream = geturl("http://app.strava.com/api/v1/streams/%s" % rid) if 'heartrate' in stream: sortables['heartrateMin'] = min(stream['heartrate']) sortables['heartrateAvg'] = sum(stream['heartrate']) / float(len(stream['heartrate'])) sortables['heartrateMax'] = max(stream['heartrate']) else: sortables['heartrateMin'] = -1 sortables['heartrateAvg'] = -1 sortables['heartrateMax'] = -1 if 'temp' in stream: temp = [x for x in stream['temp'] if x is not None] sortables['temperatureMin'] = min(temp) sortables['temperatureMax'] = max(temp) sortables['temperatureAvg'] = sum(temp) / float(len(temp)) else: sortables['temperatureMin'] = -1 sortables['temperatureMax'] = -1 sortables['temperatureAvg'] = -1 if 'cadence' in stream: sortables['cadenceAvg'] = sum(stream['cadence']) / float(len(stream['cadence'])) nonzero = [x for x in stream['cadence'] if x > 0] sortables['cadenceAvgNonZero'] = sum(nonzero) / float(len(nonzero)) else: sortables['cadenceAvg'] = -1 sortables['cadenceAvgNonZero'] = -1 return rides
def get_challenge_page(page = 1, only_complete = True, cache = False): assert page > 0, "Pages start at 1" url = "http://app.strava.com/challenges/5/details?per_page=100&overall_page=%d" % (page) if cache: from common import geturl results = geturl(url) else: start = time.time() content = urllib.urlopen(url).read() end = time.time() print "%.02f seconds" % (end-start) results = json.loads(content) #goal_type = results['dimension'] # e.g elavation_gain goal_value = results['goal'] ret = [] for user in results['overall']: userinfo = results['athletes'][str(user['id'])] percentage = (userinfo['total_dimension'] / goal_value) * 100 if only_complete and percentage < 100: return ret else: ret.append({ 'percentage': percentage, 'name': userinfo['name'], 'location': userinfo['location'], 'rank': user['rank']}) return ret
def get_rides(aid): aurl = "http://www.strava.com/api/v1/rides?athleteId=%s" % aid info = geturl(aurl) rides = {'wed': [], 'all': []} for r in info['rides']: rideinfo = geturl("http://app.strava.com/api/v1/rides/%s" % r['id']) when = rideinfo['ride']['startDate'] if map(int, when.split("T")[0].split("-")) < [2012, 07, 15]: return rides else: if map(int, when.split("T")[0].split("-")) == [2012, 07, 18]: rides['wed'].append(rideinfo) rides['all'].append(rideinfo)
def _get_ride_infos(aid, offset = 0): allrides = geturl("http://www.strava.com/api/v1/rides?athleteId=%s&offset=%d" % (aid, offset), cache=False) for r in allrides['rides']: rid = r['id'] info = geturl("http://www.strava.com/api/v1/rides/%s" % rid) stream = geturl("http://app.strava.com/api/v1/streams/%s" % rid) theride = {} theride['id'] = rid theride['name'] = info['ride']['name'] theride['startDate'] = info['ride']['startDate'] when = datetime.datetime.strptime(info['ride']['startDate'].partition("Z")[0], '%Y-%m-%dT%H:%M:%S') epoch = time.mktime(when.timetuple()) theride['startEpoch'] = epoch theride['elapsedTime'] = info['ride']['elapsedTime'] theride['distance'] = info['ride']['distance'] if 'heartrate' in stream: theride['heartrateMin'] = min(stream['heartrate']) theride['heartrateAvg'] = sum(stream['heartrate']) / float(len(stream['heartrate'])) theride['heartrateMax'] = max(stream['heartrate']) else: theride['heartrateMin'] = -1 theride['heartrateAvg'] = -1 theride['heartrateMax'] = -1 if 'cadence' in stream: theride['cadenceAvg'] = sum(stream['cadence']) / float(len(stream['cadence'])) nonzero = [x for x in stream['cadence'] if x > 0] theride['cadenceAvgNonZero'] = sum(nonzero) / float(len(nonzero)) else: theride['cadenceAvg'] = -1 theride['cadenceAvgNonZero'] = -1 theride['points'] = dict_of_list_to_list_of_dicts(stream) yield theride if len(allrides['rides']) < 50: raise NoMoreResults("Only %d on this page" % (len(allrides['rides'])))
def get_challenge_page(page=1, only_complete=True, cache=False): assert page > 0, "Pages start at 1" url = "http://app.strava.com/challenges/5/details?per_page=100&overall_page=%d" % (page) if cache: from common import geturl results = geturl(url) else: start = time.time() content = urllib.urlopen(url).read() end = time.time() print "%.02f seconds" % (end - start) results = json.loads(content) # goal_type = results['dimension'] # e.g elavation_gain goal_value = results["goal"] ret = [] for user in results["overall"]: userinfo = results["athletes"][str(user["id"])] percentage = (userinfo["total_dimension"] / goal_value) * 100 if only_complete and percentage < 100: return ret else: ret.append( { "percentage": percentage, "name": userinfo["name"], "location": userinfo["location"], "rank": user["rank"], } ) return ret
import sys from common import geturl, myid from unum.units import m as _m, km as _km, mile as _miles, s as _sec, h as _hour, d as _day import unum unum.Unum.VALUE_FORMAT = "%.01f" if len(sys.argv) > 1: aid = sys.argv[1] print "Using %s from argument" % aid else: aid = myid() print "Using my athlete ID, %s" % aid allrides = geturl("http://www.strava.com/api/v1/rides?athleteId=%s" % aid, cache=False) # Collect ride info, calculate total distance (since sum() dislikes unum objects) total_dist = 0*_km for r in allrides['rides']: rid = r['id'] info = geturl("http://www.strava.com/api/v1/rides/%s" % rid) if not info['ride']['startDate'].startswith("2012-05-"): # Only consider rides in May continue dist = info['ride']['distance'] * (_m)
from common import geturl def convert_seconds(seconds): """Converts integer seconds into human-readable MM:SS format.""" minutes = seconds // 60 seconds %= 60 return '%02i:%02i' % (minutes, seconds) allrides = geturl("http://www.strava.com/api/v1/rides?athleteId=316985", cache=False) efforts_times_by_segment_id = {} for r in allrides['rides']: rid = r['id'] efforts = geturl("http://www.strava.com/api/v1/rides/%s/efforts" % rid) for ef in reversed(sorted(efforts['efforts'], key = lambda k: k['id'])): key = (ef['segment']['id'], ef['segment']['name']) efforts_times_by_segment_id.setdefault(key, []).append(ef['elapsed_time']) for _sid_sname, times in sorted(efforts_times_by_segment_id.items(), key = lambda k: len(k[1])): sid, sname = _sid_sname if len(times) == 1: continue print "%s (%s times)" % (sname, len(times)) print " %s" % ", ".join(reversed([convert_seconds(x) for x in times]))