-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathindex.html
259 lines (242 loc) · 22 KB
/
index.html
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
<!doctype html>
<html lang="en">
<head>
<title>Torben's Strava Äpp - Activity Statistics, Excel export and bulk modify of activities</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="author" content="Torben Menke">
<meta name="description" content="Torben's Strava App: Excel export and more">
<meta name="keywords" content="Strava, App, Excel, export, import, report, search, activity list, activities, segment, csv, gps, location, bulk modify">
<link rel="stylesheet" type="text/css" href="/style.css">
<link rel="stylesheet" type="text/css" href="./style-strava.css">
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function () {
var u = "https://entorb.net/stats/matomo/";
_paq.push(['setTrackerUrl', u + 'matomo.php']);
_paq.push(['setSiteId', '4']);
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
g.async = true; g.src = u + 'matomo.js'; s.parentNode.insertBefore(g, s);
})();
</script>
<!-- End Matomo Code -->
</head>
<body>
<h1_title>
<h1 id="top">Welcome to Torben's Strava Äpp</h1>
</h1_title>
<!-- copied from README using https://markdowntohtml.com/ -->
<p><i>Update of 2025: I started to rewrite this old app in a modern technology. Check it out <a href="/strava-streamlit">here</a>. <a href="/contact.php?origin=strava">Feedback</a> and ideas for new reports are highly appreciated.</i></p>
<p><a href="https://github.com/entorb/strava" target="_blank">OpenSource</a> App using <a href="https://www.strava.com" target="_blank">Strava™'s</a> <a href="https://developers.strava.com/" target="_blank">API</a> to visualize your activity data.</p>
<ul>
<li><a href="#UserFeatures">Features</a></li>
<li><a href="#Screenshots">Screenshots</a></li>
<li><a href="#TechFeatures">Technical Features</a></li>
<li><a href="#ListOfChanges">List of Changes</a></li>
<li><a href="#UserFeedback">Feedback</a></li>
<li>Login: <br><a href="https://www.strava.com/oauth/authorize?client_id=28009&response_type=code&redirect_uri=https://entorb.net/strava/auth.pl?exchange_token&approval_prompt=force&scope=activity:read_all,activity:write">
<button class="strava-connect-button">
<img src="./strava-resources/btn_strava_connectwith_light.svg" alt="Connect with Strava">
</button>
</a>
</li>
</ul>
<!--
<form action="https://www.strava.com/oauth/authorize?client_id=28009&response_type=code&redirect_uri=https://entorb.net/strava/auth.pl?exchange_token&approval_prompt=force&scope=activity:read_all,activity:write" method="post">
<input type="submit" class="navButton" id="quickstart" value="Quickstart" title="read&write public&private activities">
</form>
-->
<h2 id="UserFeatures">User features</h2>
<!-- copied from README using https://markdowntohtml.com/ -->
<ul>
<li>Import and Export of Activities<ul>
<li>Excel/CSV Import</li>
<li>Excel Export</li>
<li>Calendar (iCal) Export</li>
</ul>
</li>
<li>Analysis<ul>
<li>Filterable Table of all Activities</li>
<li>Activity Statistics<ul>
<li>Per Activity Type: Run, Ride, Swim, ...</li>
<li>Measures: Distance, Elevation, Heart Rate, ...</li>
<li>Aggregations: Sum and Average</li>
<li>Grouped by: Month, Quarter and Year</li>
</ul>
</li>
<li>Top10 Activities Regarding Various Measures</li>
</ul>
</li>
<li>Geo locations<ul>
<li>Find and Name Frequent Start/End Geo Locations</li>
<li>Search for Activities based on Location</li>
</ul>
</li>
<li>Segments<ul>
<li>Table of your Starred Segments</li>
<li><del>Segment Leaderboard Table</del> (API endpoint removed by Strava)</li>
</ul>
</li>
<li>Activity Modification<ul>
<li>Bulk Modify of Activity Meta Data: <br> set name, description, commute-flag, training-machine-flag for multiple activities</li>
</ul>
</li>
</ul>
<a href="#top">back to top</a>
<h2 id="Screenshots">Screenshots</h2>
<p> Activity statistics V2<br>
<img src="screenshots/actStats2-count.png" alt="actStats2-count.png">
</p>
<p> Generated Excel report<br>
<img src="screenshots/ActivitiesAll.png" alt="ActivitiesAll.png" width="895" height="119">
</p>
<p> Custom charts and slicers on a connected analysis sheet<br>
<img src="screenshots/ActivitiesAll-Charts.png" alt="ActivitiesAll-Charts.png" width="1290" height="442">
</p>
<!-- <p> Activity statistics table<br>
<img src="screenshots/Stats-run-qrt.jpg" alt="Stats-run-qrt.jpg" width="1256" height="262"><br>
</p> -->
<!-- <p> Activity statistics chart<br>
<img src="screenshots/act-stats-Run-Quarter-elevation-av.png" alt="act-stats-Run-Quarter-elevation-av.png" width="800" height="400">
</p> -->
<!--
<h2>Start by choosing permission scope for the app</h2>
<ul>
<li>
<a href="https://www.strava.com/oauth/authorize?client_id=28009&response_type=code&redirect_uri=https://entorb.net/strava/auth.pl?exchange_token&approval_prompt=force&scope=activity:read_all,activity:write">Quickstart</a><br>
</li>
<li>
<a href="https://www.strava.com/oauth/authorize?client_id=28009&response_type=code&redirect_uri=https://entorb.net/strava/auth.pl?exchange_token&approval_prompt=force&scope=activity:read">read public activities</a>
</li>
<li>
<a href="https://www.strava.com/oauth/authorize?client_id=28009&response_type=code&redirect_uri=https://entorb.net/strava/auth.pl?exchange_token&approval_prompt=force&scope=activity:read_all">read public&private activities</a> (preferred choice for statistics and Excel export of your activities)
</li>
<li>
<a href="https://www.strava.com/oauth/authorize?client_id=28009&response_type=code&redirect_uri=https://entorb.net/strava/auth.pl?exchange_token&approval_prompt=force&scope=activity:read,activity:write">read&write public activities</a>
</li>
<li>
<a href="https://www.strava.com/oauth/authorize?client_id=28009&response_type=code&redirect_uri=https://entorb.net/strava/auth.pl?exchange_token&approval_prompt=force&scope=activity:read_all,activity:write">read&write public&private activities</a> (preferred choice if you want to modify your activities as well)
</li>
</ul>
-->
<a href="#top">back to top</a>
<h2 id="TechFeatures">Technical Features</h2>
<!-- copied from README using https://markdowntohtml.com/ -->
<ul>
<li>OpenSource: source code available at <a href="https://github.com/entorb/strava">GitHub</a></li>
<li>Proudly made without cookies, database and of course free from advertisement</li>
<li>Plain and simple layout</li>
<li>Coded mainly in <a href="/wickie/Perl">Perl</a> and <a href="/wickie/Gnuplot">Gnuplot</a>, recently extended by <a href="/wickie/Python">Python</a> <a href="/wickie/Pandas">Pandas</a> and JavaScript <a href="https://tabulator.info/">Tabulator</a> and <a href="https://echarts.apache.org/">ECharts</a></li>
<li>High level of security and privacy<ul>
<li>HTTPS encrypted communication</li>
<li>no data is kept in a database</li>
<li>a temporary access token to your Strava profile is used and deleted after logout</li>
<li>your temporarily cached data is deleted upon logout</li>
<li>no third party APIs used (no Google Analytics, Maps, etc)</li>
</ul>
</li>
</ul>
<a href="#top">back to top</a>
<h2 id="ListOfChanges">List of Changes</h2>
<!-- copied from README using https://markdowntohtml.com/ -->
<ul>
<li>2025-01-02: <a href="/strava-streamlit">rewriting the app</a> in modern technology (Python Streamlit)</li>
<li>2024-11-16: activity bulk modify now supports update gear</li>
<li>2024-11-16: hit a Strava limit of 1000 active athlets of this app, they now raised the limit to 10000</li>
<li>2023-07-02: activity Top10 V2</li>
<li>2023-06-12: fancy activity statistics charts</li>
<li>2023-06-08: usage stats: 2697 unique and 669 returning users. </li>
<li>2020-07-24: usage stats: this tool passed the 1000-unique-users milestone!</li>
<li>2020-07-21: fancy activity table</li>
<li>2020-01-06: published source code on <a href="https://github.com/entorb/strava/" target="_blank">GitHub</a></li>
<li>2019-06-08: top10 activities</li>
<li>2019-05-21: starred segments overview</li>
<li>2019-05-21: Excel import of activities</li>
<li>2019-05-16: limited caching to max 1000 activities per run and optimized performance, to prevent timeouts</li>
<li>2019-05-05: charts for activity statistics</li>
<li>2019-04-03: nearest city via an offline database of cities\'s geolocation, created from <a href="https://www.maxmind.com" target="_blank">MaxMind\'s GeoLite2 data</a></li>
<li>2019-03-20: search for activities</li>
<li>2019-01-12: activities sorted now ASC by date, statistics extended to record speed and elevation/distance</li>
<li>2019-01-03: gear name (bike/shoe) in Excel export</li>
<li>2018-12-05: activity statistics</li>
<li>2018-11-30: caching of activities per year, besides caching of all at once, to prevent timeout issues</li>
</ul>
<a href="#top">back to top</a>
<h2 id="UserFeedback">User feedback</h2>
<ul>
<li>2025-01-07 Todd: Just wanted to say a massive thank you for the Strava bulk upload app. You saved me soooooo much time trying to import 2 years worth of manually tracked weight training data. Absolutely brilliant app. Thank you!</li>
<li>2024-08-01 Gustavo: It's a super nice tool. THANK YOU!!</li>
<li>2022-12-06 Angela: Just wanted to say a huge thank you for your Strava upload solution - it seems to be the only one out there. I'm super grateful to you for sharing this. </li>
<li>2022-11-23 Jacob: I cannot thank you enough for this exceptionally useful tool. I was able to upload about 10 years of running data from my Garmin Connect to my Strava account. (even more blessings at <a href="https://twitter.com/SLCPaladin/status/1595473306983231488" target="_blank">Twitter</a>)</li>
<li>2022-09-12 Ricardo: Used it to upload data from CSV created by Zepp. I am switching to Polar, so your tool was EXTREMELY helpfull. Thank you so much!! Cheers</li>
<li>2022-03-18 Claudia: besten Dank für die Strava Äpp! Genau das, was ich gesucht habe</li>
<li>2021-12-20 Stefan: Many thanks for your Strava app. Finally did I find a way to see my Nordic Skiing stats.</li>
<li>2021-08-15 Chinmay: Kudos to you. What an app! Thank you so much.</li>
<li>2021-05-13 Markus: Thanks for the app, it's very helpful.</li>
<li>2021-04-03 Peter: Fantastic stuff, many thanks for this! It converts Strava data from fun to a great analysis base. Have a nice day!</li>
<li>2021-03-01 Eugene: This app is amazing and full of useful details.</li>
<li>2020-12-27 Mike: Excellent work! Thank YOU!!!</li>
<li>2020-09-23 Tom: big thanks from australia here for your strava manual upload plugin.</li>
<li>2020-09-16 Don: This is fantastic. I was excited to learn that I have a cumulative elevation gain in all my activities to summit Mt. Everest over 7 times! Thanks for putting this together. Much appreciated.</li>
<li>2020-08-25 Franz: vielen Dank für dein klasse Exporttool Strava→Excel</li>
<li>2020-07-10 John: Great tool!! Worked superbly.</li>
<li>2020-05-28 Sebastian: großartiges Tool, ich war schon dabei mir etwas eigenes zu basteln (was definitiv nicht deine Qualität erreicht hätte) - awesome tool and thanks for all the work!</li>
<li>2020-05-23 Mike: Thanks for sharing your great interface with everyone!</li>
<li>2020-05-09 Martin: I just want to say BIG THANK you for your great tool. I needed the export to gather my life time sport-related data. I also like statistics a lot. Keep up great work you do!</li>
<li>2020-02-25 Tony: Thanks so much for this tool, I've been able to load years of past information in a couple of hours.</li>
<li>2020-01-21 Chris: Hi. I love your Strava app. I use the excel export on a regular basis and for my needs </li>
<li>2020-01-19 Mike: Great program. Many thanks! This means a lot to me, and I am sure a lot of other people. Have a great year!</li>
<li>2020-01-07 Ben: Awesome set of tools, love all the data!</li>
<li>2019-12-30 Jon: Your strava import/export site is excellent! I just imported years of manual data and it worked perfectly. And the export will allow me to recreate my excel pivot charts using the entirety of my training data. Thank you for sharing it!</li>
<li>2019-12-17 Tim: Thanks for the useful tool. I really just needed to be able to see my total miles for 2019 and 2020. Only your tool seems to be able to do it.</li>
<li>2019-12-02 Cody: I got it all figured out! Things are importing smoothly now. Hundreds of rides from 2007 to 2014. This is making me so happy! I will definitely spread the word with anyone who needs something like this.</li>
<li>2019-09-11 Georg: Thank you Torben for making this facility available</li>
<li>2019-08-27 Sergio: Brilliant job. I have been looking for something like that for ages. And it's written in Perl! I thought I was the last one Perl Programmer... Keep up with the good work!</li>
<li>2019-08-07 Scott: Thanks for making the application!</li>
<li>2019-07-02 Rob: This is a cool tool! </li>
<li>2019-06-26 Chris: Your app works great and I believe will be a big value to people who use Strava. The import function will be great when Strava or Garmin doesn't work right leaving us to do manual input. Your answers were so quick also. I didn't expect you to do this work on such a expedient basis, nor did you have to do this for us, but you did, and it works wonderfully. Thank you so much.</li>
<li>2019-06-26 Dave: The Excel data importer is a great feature of this Strava app. Instead of having to manually transcribe my activity data that predates Strava, I was able to quickly setup my old Excel data into a format compatible with this tool. Copy, paste, preview and submit and the data is in Strava correctly. Thank you.</li>
<li><a href="https://support.strava.com/hc/en-us/community/posts/208838457/comments/360006178612#community_comment_360006178612" target="_blank">2019-06-23 Richard</a>: Thank you, Worked perfectly!</li>
<li><a href="https://support.strava.com/hc/en-us/community/posts/208838457/comments/360005515591#community_comment_360005515591" target="_blank">2019-05-06 Rémi</a>: Awesome tool! As I wasn't really familiar with Strava Apps, it took me a couple of minutes to understand how to use it, maybe it's worth producing a little "tutorial" in a few steps. Anyway, that's a great help and it brought me exactly what I needed to analyze and measure my progresses from my Strava stats! Thanks for your work!</li>
<li>2019-04-20 Brie: Thanks so much for making it! It's great!</li>
<li><a href="https://support.strava.com/hc/en-us/community/posts/208838457/comments/360005038451" target="_blank"> 2019-03-28 Wilton</a>: That's fantastic work! Thanks for all your work. Exactly what I was after.</li>
<li>2019-03-20 Jon Magnus: Great site! I'm very grateful that I found info about it on a discussion forum.</li>
<li>2019-02-23 Nick: thanks for the strava tool! incredibly useful!</li>
<li>2019-02-08 Daniel: thanks man! this works great!!!</li>
<li><a href="https://support.strava.com/hc/en-us/community/posts/208838457/comments/360003607592" target="_blank">2019-01-01 David</a>: Great excel exporter tool Torben!! Thanks</li>
<li><a href="https://support.strava.com/hc/en-us/community/posts/208838457/comments/360003602031" target="_blank">2019-01-01 Johan</a>: Perfect tool...all i was looking for for years. Thanks</li>
<li><a href="https://support.strava.com/hc/en-us/community/posts/208838457/comments/360003586871" target="_blank">2018-12-31 Bill</a>: Really cool! Works great. Thanks!</li>
<li>2018-12-31 Gabe: Thanks for the cool Strava exporter. It was exactly what I was looking for -- frustrating that Strava doesn't provide these features themselves! Anyway your tool works great and, as a fellow perl coder, I'm happy to see such nice work written in perl :-)</li>
<li><a href="https://support.strava.com/hc/en-us/community/posts/208838457/comments/360003268951" target="_blank">2018-12-03 Stephen</a>: super awesome and thank you!</li>
<li><a href="https://support.strava.com/hc/en-us/community/posts/208838457/comments/360003165772" target="_blank">2018-11-28 Wayne</a>: Excellent tool, just downloaded my Strava history, and its impressive the no of fields that the data contains. Now we need a tool to download segments :)</li>
<li><a href="https://support.strava.com/hc/en-us/community/posts/208838457/comments/360003165391" target="_blank">2018-11-27 Ken</a>: Thanks Torben! The extract worked extremely well!</li>
<li><a href="https://support.strava.com/hc/en-us/community/posts/208838457/comments/360003122352" target="_blank">2018-11-24 Kyle</a>: Thank you!</li>
<li>2018-11-24 Volker: Vielen Dank dafür!</li>
<li><a href="https://support.strava.com/hc/en-us/community/posts/208838457/comments/360003041852" target="_blank">2018-11-17 John</a>: Excellent tool. Exactly what everyone is looking for in terms of Excel export. Thank you for your effort!</li>
</ul>
<a href="#top">back to top</a>
<h2 id="Disclaimer">Disclaimer</h2>
<table style="width:50%; border: 0px; font-size: smaller">
<tr>
<th style="width:50%">Disclaimer</th>
<th style="width:50%">Haftungsausschluss</th>
</tr>
<tr>
<td style="width:50%"> This piece of software is tested extensively and to the best of my knowledge, but I cannot garanty for error-free operation. Use at your own risk. Developed by Torben Menke, using <a href="https://developers.strava.com/" target="_blank">Strava's API</a>, requires a <a href="https://www.strava.com/" target="_blank">Strava account</a>. </td>
<td style="width:50%"> Diese Software ist ausgiebig und nach bestem Wissen und Gewissen getestet, trotzdem können Fehler nicht ausgeschlossen werden. Ich übernehme keinerlei Haftung für Fehler und garantiere nicht für die korrekte Funktionsweise. Entwickelt von Torben Menke, unter Verwendung der <a href="https://developers.strava.com/" target="_blank">Strava API</a>, erfordert einen <a href="https://www.strava.com/" target="_blank">Strava Account</a>. </td>
</tr>
<tr>
<td style="width:50%; vertical-align:top"> Security and Privacy<br> I put quite some effort on implementing as much security and privacy issues: All communication is encrypted via HTTPS. The access to your data is not via your login credentials (my app does not see your password!). Instead, an "access token" is generated and provided by Strava after you granting (temporary) permission to this app. For reasons of data reduction and data responsibility, these sensitive access tokens as well as your Strava content are not stored permanently but are deleted after 1 hour (at the next login by anyone) and the access token is de-registered at Strava (can be checked <a href="https://www.strava.com/settings/apps" target="_blank">here</a>). As a consequence, the user must grant access again via Strava before each use of my app. Furthermore, I have implemented a button for manually deletion of this data. One exception: I do not delete your coordinates to known locations automatically. In order to do so you can replace the list with an empty list, which leads to deletion of your locations. The access token, the temporary JSON data of your Strava activities and your known locations are outside the server's web folder and are therefore technically not accessible from the internet. The access tokens are only transmitted to communicate with Strava (and as little as possible and not via URL, but in the body) and encrypted via HTTPS. The communication between your browser and my website uses a non-critical custom session ID, which allows the web server to retrieve the appropriate access token from its temporary storage. Despite these efforts, I cannot guarantee 100% security of your data, so use at your own risk. </td>
<td style="width:50%; vertical-align:top"> Sicherheit und Privatsphäre<br> Ich habe mir größte Mühe gegeben so viel Sicherheit und Privatsphäre so gut wie möglich zu respektieren und zu schützen: Sämtliche Kommunikation erfolgt verschlüsselt via HTTPS. Der Zugriff auf Eure Daten erfolgt nicht über die eure Logindaten (diese bekommt meine App nicht zu sehen!), sondern über einen „Accesstoken“, der von Strava nach (temporären) Freigabe von euch für diese App generiert wird. Aus Gründen der Datensparsamkeit und der damit einhergehenden Verantwortung werden diese sensiblen Accesstoken und ebenso wie zwischengespeicherte Strava Inhalte nicht permanent gespeichert, sondern schon nach 1 Stunde (beim nächsten Login durch irgendeinen Besucher) gelöscht (<a href="https://www.strava.com/settings/apps" target=" _blank">Hier</a> zu prüfen.). Als Konsequenz muss der Anwender vor jeder Verwendung meiner App erneut den Zugriff via Strava gewähren. Ferner habe ich einen Button zum manuellen Löschen dieser Daten implementiert. Einzige Ausnahme: Eure Koordinaten zu bekannten Orten lösche ich nicht automatisch, diese könnt ihr durch eine leere Liste ersetzen, dann werden diese gelöscht. Die Accesstoken, die temporären von Strava kommenden JSON-Daten der Aktivitäten und eure bekannten Orte liegen außerhalb des Web-Ordners des Servers und sind damit technisch nicht aus dem Internet abrufbar. Die Accesstoken werden nur zur Kommunikation mit Strava (und so wenig wie möglich) über das Netz (und nicht via URL, sondern im Body) und verschlüsselt via HTTPS übertragen. In der Kommunikation zwischen eurem Browser und meiner Webseite wird eine unkritische selbstdefinierte Session-ID verwendet, über die sich der Webserver den passenden Accesstoken aus seinem temporären Speicherort holt. Trotz dieser Aufwände kann ich keine 100% Sicherheit der Daten garantieren, daher erfolgt die Benutzung auf eigenes Risiko. </td>
</tr>
</table>
<p><i style="text-align:center">TL;DR: Use this software on your own risk. </i></p>
<a href="#top">back to top</a>
<p><img src="./strava-resources/api_logo_pwrdBy_strava_horiz_light.svg" alt="Powered by Strava" width="338" height="63"></p>
<hr>
<a href="/">Home</a> <a href="/contact.php?origin=strava">Contact me</a> <a href="/impressum.php">Website Disclaimer</a>
</body>
</html>