personal_site/get_strava_token.py
2025-07-05 15:34:23 -05:00

79 lines
No EOL
2.4 KiB
Python

import os
import requests
from urllib.parse import urlencode
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
# Get values from environment variables
CLIENT_ID = os.getenv('STRAVA_CLIENT_ID')
CLIENT_SECRET = os.getenv('STRAVA_CLIENT_SECRET')
REDIRECT_URI = os.getenv('STRAVA_REDIRECT_URI', 'http://localhost')
# Validate required environment variables
if not CLIENT_ID or not CLIENT_SECRET:
print("Error: Missing required environment variables.")
print("Please ensure STRAVA_CLIENT_ID and STRAVA_CLIENT_SECRET are set in your .env file")
exit(1)
# Step 1: Get authorization URL
auth_url = f"https://www.strava.com/oauth/authorize?{urlencode({
'client_id': CLIENT_ID,
'response_type': 'code',
'redirect_uri': REDIRECT_URI,
'approval_prompt': 'force',
'scope': 'read,activity:read_all'
})}"
print("=" * 60)
print("STRAVA API SETUP")
print("=" * 60)
print(f"1. Visit this URL in your browser:")
print(f"{auth_url}")
print()
print("2. Click 'Authorize' to allow access to your Strava data")
print("3. You'll be redirected to a localhost URL that won't load")
print("4. Copy the ENTIRE URL from your browser's address bar")
print("5. Look for the 'code=' parameter in that URL")
print()
print("Example: http://localhost/?state=&code=ABC123XYZ&scope=read,activity:read_all")
print("In this example, your code would be: ABC123XYZ")
print("=" * 60)
code = input("Enter the authorization code from the URL: ").strip()
if not code:
print("No code entered. Exiting.")
exit()
# Step 2: Exchange code for tokens
print("\nExchanging code for tokens...")
token_url = 'https://www.strava.com/oauth/token'
data = {
'client_id': CLIENT_ID,
'client_secret': CLIENT_SECRET,
'code': code,
'grant_type': 'authorization_code'
}
response = requests.post(token_url, data=data)
if response.status_code == 200:
tokens = response.json()
print("\n" + "=" * 60)
print("SUCCESS! Here are your tokens:")
print("=" * 60)
print(f"ACCESS_TOKEN: {tokens['access_token']}")
print(f"REFRESH_TOKEN: {tokens['refresh_token']}")
print(f"EXPIRES_AT: {tokens['expires_at']}")
print()
print("Add these to your .env file:")
print("=" * 60)
print(f"STRAVA_ACCESS_TOKEN={tokens['access_token']}")
print(f"STRAVA_REFRESH_TOKEN={tokens['refresh_token']}")
print(f"STRAVA_EXPIRES_AT={tokens['expires_at']}")
print("=" * 60)
else:
print(f"Error: {response.status_code}")
print(response.text)