Upload GPS Tracks to Strava from your Command Line
This short tutorial describes how to upload GPS tracks to Strava using your command line interface / shell. It requires no special tools or any 3rd party code.
Run all following steps with your user logged in to Strava in your browser!
1. Generate an API Key
Strava uses OAuth to authenticate against 3rd party applications. In order to authenticate to your Strava account from your command line, you first have to generate an API key. Therefore go to this page https://strava.github.io/api/v3/oauth/ and create a new API. The settings are as follows:
Application Namechose whatever name you like (does not matter for our use case)
Websitechose whatever website you want to use (needs to be a valid url, e.g. [http://google.com] (does not matter for our use case)
Callback Domainany domain name that should be used as a callback (does not matter for our use case)
After you saved your API, you need to upload a image for it.
Open the https://strava.github.io/api/v3/oauth/ page again and copy the following values to a text editor
Client ID- an ID for your application, used later on to identify your App
Secret- a secret token generated for you (not your OAuth Token!)
2. Generate an OAuth Token
For the purpose of generating the OAuth token, this documentation helps a lot https://strava.github.io/api/v3/oauth/.
Open the following URL (replace
CLIENT_IDwith the ID from above):
https://www.strava.com/oauth/authorize?client_id=CLIENT_ID&response_type=code&redirect_uri=http%3A%2F%2Flocalhost&scope=write&state=mystate&approval_prompt=force(make sure to properly quote the redirect URL)
Cope the Code from the URL that is given as the
Run the following CURL request, to get the final OAuth token:
curl -X POST https://www.strava.com/oauth/token \ -F client_id=12345 \ -F client_secret=... \ -F code=...
access_tokenfrom the JSON response - this is your OAuth token
3. Upload your tracks
Now comes the funny part. Use the following command to upload a track to Strava:
curl -X POST https://www.strava.com/api/v3/uploads -H "Authorization: Bearer OAUTH_TOKEN" -F file=@"PATH_TO_FILE" -F data_type="tcx"
If you want to upload a directory with files, use the following command
for i in `ls /path/to/files/*.tcx` do curl -X POST https://www.strava.com/api/v3/uploads -H "Authorization: Bearer OAUTH_TOKEN" -F file=@"$i" -F data_type="tcx" done