-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.py
More file actions
115 lines (77 loc) · 3.9 KB
/
Copy pathutils.py
File metadata and controls
115 lines (77 loc) · 3.9 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
103
104
105
106
107
108
109
110
111
112
113
from api import autorization
from datetime import datetime, timedelta
import json
def autorize(client_id, client_secret):
auth_req = autorization(client_id, client_secret)
def get_data_run(time_week_x, code):
runs_dict = {}
first_day = time_week_x[0].split(' ')[0].replace('/', '-')
for number_week_counter in range(len(time_week_x)):
runs_dict[number_week_counter] = [0, 0, 0]
with open(f'runs{code}.json') as json_run:
runs = json.load(json_run)
for page in runs:
for run in page:
if(run['sport_type'] == 'Run' or run['sport_type'] == 'TrailRun'):
run_date = run['start_date'].split('T')[0]
weeks_delta = weeks_between(first_day, run_date)
if(weeks_delta >= 0):
km, time_duration, elevation = runs_dict[weeks_delta]
runs_dict[weeks_delta] = [km + run['distance'], time_duration + run['elapsed_time'], elevation + run['total_elevation_gain']]
distance , times, gain = [], [], []
for m, t, d in runs_dict.values():
distance.append(m/1000)
times.append(t/3600)
gain.append(d)
return runs_dict, distance, times, gain
def get_weeks(years):
# Parse i dati di input
current_datetime = datetime.now().strftime("%Y-%m-%d")
input_date = datetime.strptime(current_datetime, "%Y-%m-%d")
# Ottieni l'anno corrente e i tre anni precedenti
current_year = input_date.year
target_years = [current_year - i for i in range(years, 0, -1)] + [current_year]
# Lista per contenere le informazioni su tutte le settimane
all_weeks_info = []
# Cicla su ciascun anno nei target_years
for target_year in target_years:
# Trova il primo lunedì dell'anno
first_day_of_year = datetime(target_year, 1, 1)
first_monday = first_day_of_year + timedelta(days=(7 - first_day_of_year.weekday()) % 7)
# Scorri attraverso ogni settimana dell'anno
current_monday = first_monday
week_number = 1
while current_monday.year == target_year:
# Calcola la domenica di quella settimana
current_sunday = current_monday + timedelta(days=6)
# Se siamo nell'anno corrente e superiamo la data fissata, interrompi il ciclo
if target_year == current_year and current_monday > input_date:
break
# Aggiungi le informazioni della settimana alla lista
all_weeks_info.append({
"year": target_year,
"week_number": week_number,
"monday_start": current_monday.date(),
"sunday_finish": current_sunday.date()
})
# Passa al lunedì successivo
current_monday += timedelta(weeks=1)
week_number += 1
# Ordina le settimane in ordine cronologico basato sulla data di inizio
all_weeks_info.sort(key=lambda week: week["monday_start"])
date_time_x = []
date_time = []
# Stampa i risultati
for week in all_weeks_info:
date_time_x.append(f"{week['year']}-{week['monday_start'].month}/{week['monday_start'].day} to {week['sunday_finish'].month}/{week['sunday_finish'].day}")
date_time.append([week['year'], [week['monday_start'],week['sunday_finish']]])
return date_time, date_time_x
def weeks_between(start_date_str, end_date_str):
# Converti le stringhe di data in oggetti datetime
start_date = datetime.strptime(start_date_str, "%Y-%m-%d")
end_date = datetime.strptime(end_date_str, "%Y-%m-%d")
# Calcola la differenza tra le due date in giorni
days_difference = (end_date - start_date).days
# Converti la differenza in settimane
weeks_difference = days_difference // 7 # Divisione intera per ottenere settimane complete
return weeks_difference