-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathget_data.py
More file actions
102 lines (85 loc) · 3.86 KB
/
Copy pathget_data.py
File metadata and controls
102 lines (85 loc) · 3.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#v3 06/08/18 - SUPPORT FOR PAGINATION
import requests
import time
import datetime
from datetime import date
import get_time
import collections
import json
import calendar
import credentials
def my_filtered_activities(): #combines my_activities and filter functions
url = 'https://www.strava.com/api/v3/athlete/activities'
header = {'Authorization': 'Bearer '+credentials.api_key}
param = {'per_page':200, 'page':1}
dataset = requests.get(url, headers=header, params=param).json()
count = len(dataset)
if count == 200: #if 200 results come back
loop_count = 1 #we've already done one loop
while count == 200: #while it keeps returning 200 results
loop_count = loop_count + 1 #increase loop_count or page number
param = {'per_page':200, 'page':loop_count} #reset params
sub_dataset = requests.get(url, headers=header, params=param).json() #pull new data with sub_dataset name
dataset = dataset + sub_dataset #combine (Json files, not dictionaries thank jesus)
count = len(sub_dataset) #count results to see if we need to loop again
return {event_timestamp(i): clean_event(i) for i in dataset if wanted_event(i)} #return as normal
def my_activities():
url = 'https://www.strava.com/api/v3/athlete/activities'
header = {'Authorization': 'Bearer '+credentials.api_key}
param = {'per_page':200, 'page':1}
my_dataset = requests.get(url, headers=header, params=param).json()
return my_dataset
def activities():
url = 'https://www.strava.com/api/v3/activities/following'
header = {'Authorization': 'Bearer '+credentials.api_key}
param = {'per_page':200, 'page':1}
dataset = requests.get(url, headers=header, params=param).json()
return dataset
def wanted_event(i):
return i['type'] == 'Run' and i['distance'] != 0.0
def event_timestamp(i):
return convert_timestamp(i['start_date_local'])
def convert_weekday(i):
return str(calendar.day_name[i.weekday()])+" "+str(i.day)
def convert_weekday_full(i):
return str(calendar.day_name[i.weekday()])+" "+str(calendar.month_name[i.month])+" "+str(i.day)
def convert_weekday_short(i):
return str(calendar.day_abbr[i.weekday()])+" "+str(calendar.month_abbr[i.month])+" "+str(i.day)
def clean_event(i):
if not i['has_heartrate']:
i['average_heartrate'] = i['max_heartrate'] = 0
i['elapsed'] = convert_seconds_to_minutes(i['elapsed_time'])
i['pace_dec'] = convert_pace(i['distance'],i['moving_time'])
i['pace'] = convert_dec_time(convert_pace(i['distance'],i['moving_time']))
i['distance_miles'] = convert_meters_to_miles(i['distance'])
i['total_elevation_feet'] = convert_elevation(i['total_elevation_gain'])
i['start_date_datetime'] = event_timestamp(i)
i['weekday_date'] = convert_weekday(i['start_date_datetime'])
i['weekday_full_date'] = convert_weekday_full(i['start_date_datetime'])
i['weekday_short_date'] = convert_weekday_short(i['start_date_datetime'])
if "Treadmill" not in i['name']:
i['treadmill_flagged'] = "no"
if "Treadmill" in i['name']:
i['treadmill_flagged'] = "yes"
return i
# def filter(dataset):
# return {event_timestamp(i): clean_event(i) for i in dataset if wanted_event(i)}
def convert_seconds_to_minutes(i):
return datetime.timedelta(seconds=i)
def convert_timestamp(i):
return datetime.datetime.strptime(i, "%Y-%m-%dT%H:%M:%SZ")
def convert_pace(distance,elapsed):
minutes = elapsed/60
miles = distance * 0.00062137
pace = minutes/miles
return pace
def convert_dec_time(dec):
#converts decimal time to readable time format
Minutes = dec
Seconds = 60 * (Minutes % 1)
result = ("%d:%02d" % (Minutes, Seconds))
return result
def convert_meters_to_miles(meters):
return ("{0:.2f}".format(int(meters) * 0.000621371))
def convert_elevation(i):
return float(("{0:.2f}".format(i*3.28)))