def main(): opter = optparse.OptionParser() opter.add_option("--csv", action="store_true", default = False) opter.add_option("-a", "--athlete", dest="athlete", type="int") opts, args = opter.parse_args() if opts.athlete is None: aid = myid() else: aid = opts.athlete if len(args) == 0: sort_key = 'startDate' elif len(args) > 1: opter.error("Sort argument must be ...") # FIXME: populate this else: sort_key = args[0] rides = get_ride_infos(aid = aid) if opts.csv: headings = sorted(rides[0].keys()) out = [] out.append(show_csv_heading()) for r in rides: out.append(show_csv(r)) #open("to_r.csv", "w+").write("\n".join(out)) print "\n".join(out) else: s = sorted(rides, key = lambda k: k[sort_key]) print "\n\n".join(show_ride(r) for r in s)
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
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)
""" import optparse opter = optparse.OptionParser() opter.add_option("-a", "--athlete", dest="athlete", type="int") opter.add_option("-d", "--downsample", dest="downsample", type="int", default=50) opter.add_option("-o", "--out", dest="out", default="mymap.html") opter.add_option("-l", "--limit", dest="pagelimit", default=4, help = "Each page contains 50 rides. -l 4 will download at most 200 rides (starting with the most recent)") opts, args = opter.parse_args() if opts.athlete is None: import common aid = common.myid() else: aid = opts.athlete 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)
def get_ride_infos(aid): for x in range(50): curpage = _get_ride_infos(offset = x*50, aid = aid) try: for c in curpage: yield c except NoMoreResults: return def tcx_date(epoch): dt = datetime.datetime.fromtimestamp(epoch) return dt.strftime("%Y-%m-%dT%H:%M:%SZ") for ride in get_ride_infos(myid()): fname = "/Users/dbr/Desktop/tcx/ride_%d.tcx" % ride['id'] print "Writing %s" % fname f = open(fname, "w+") f.write(prefix.format()) f.write(actvitiy_and_lap_def.format(**ride)) for i, point in enumerate(ride['points']): point['time'] = tcx_date(epoch = ride['startEpoch'] + point['time']) point['lat'], point['lng'] = point['latlng'] if 'cadence' in point: point['cadence'] = "<Cadence>%d</Cadence>" % (point['cadence']) else: point['cadence'] = ""