示例#1
0
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,
             })
示例#2
0
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
示例#3
0
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)
示例#6
0
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)
示例#7
0
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)
示例#10
0
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]))