This is a simple Strava client written in Python. I found Strava's Python API to be difficult to use, so I wrote this wrapper that uses requests to expose all GET requests that are available in Strava's API documentation.
You have to manually follow the tutorial listed below to retrieve a client_id and a client_secret. This has to be done only once. Afterwards, strava_connector exposes convenient wrappers.
pip install strava_connector
or
poetry add strava_connector
For the following example to work, you need to follow the Authentication workflow below.
Here's an example that shows how to retrieve a user's recent activities.
This is a wrapper around getLoggedInAthleteActivities.
from strava_connector.connector import Connector
connector = Connector(".tokens_client.json",".tokens_strava.json")
res = connector.getLoggedInAthleteActivities(page=1, per_page=3)Run the following steps.
You have to first execute the first step (Create your App/API Connection) presented in this amazing tutorial by Benji Knights Johnson.
As a result, you will have received your client_id and your client_secret.
We need to run an initial authentication.
Run the following code interactively in a python shell and replace the fake client_id and client_secret with the ones obtained in the previous step.
from strava_connector import initial_auth
client_id = "8xxxxxxxxxx1"
client_secret = "axxxxxxxxxxxxxxxxxxxxxxxxxc"
initial_auth(client_id, client_secret)This will prompt you to click on a link and the dialogue will look something like this:
Click on the following authentication url.
You will be redirected and have to click 'Authorize'.
This redirects to a domain that does not resolve.
Click here. # On MacOs, you can do option+left mouse on this link.
Paste the full url in here.
http://localhost/exchange_token?state=&code=2xxxxxxxxxxxxx // redacted
{'client_secret': 'axxxxxxxxxxxxxxxxxxxxxxxxxc', 'client_id': '8xxxxxxxxxx1'}
{
'token_type': 'Bearer',
'expires_at': 1714407867,
'expires_in': 20187,
'refresh_token': '7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb',
'access_token': '6xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa',
'athlete': { // redacted }
}This creates the two required files, .tokens_client.json and .tokens_strava.json.
I heavily used Github's Copilot as an advanced autocomplete
for the creation of the get_... methods and for writing the test_get_... methods.
- Strava authentication tutorial by Benji Knights Johnson
- This package was created with
cookiecutterandthomascamminady/cookiecutter-pypackage, a fork ofaudreyr/cookiecutter-pypackage. - Documentation via pdoc