# Hämta riktiga Garmin-aktiviteter Appen använder för närvarande **exempelpass** i `app/sample_data.py`. För att visa **dina** löprundor behöver du **Garmin Connect Developer Program** och anropa Garmins API:er med giltiga OAuth-token. Att skrapa Garmin Connect privat strider mot deras villkor; använd det officiella programmet. ## 1. Få tillgång till programmet 1. Läs översikten: [Activity API | Garmin Connect Developer Program](https://developer.garmin.com/gc-developer-program/activity-api/). 2. Tillgång ges **godkända företagsutvecklare** (inte en privat hobby-nyckel). Använd **Request now** / kontakt på sidan om du behöver produktionstillgång. 3. Skapa ett **Garmin developer-konto** och registrera din app i **developer portal** när du är med i programmet. Du får **client ID** och **client secret** för integrationen. ## 2. OAuth 2.0 med PKCE Garmin använder **OAuth 2.0 med PKCE** (Proof Key for Code Exchange). Efter att användaren loggat in och godkänt får din app en **auktoriseringskod**, byter den mot **access-** och **refresh-token**, och anropar sedan API:er med: ```http Authorization: Bearer <access_token> ``` Officiellt referensmaterial (PDF från Garmins developer portal): - [OAuth2 PKCE specification (Garmin)](https://developerportal.garmin.com/sites/default/files/OAuth2PKCE_1.pdf) Typiskt flöde (exakta parameternamn och scopes finns i dokumentet och i din portalprojekt): 1. **Auktorisering (webbläsaromdirigering)** Användaren öppnar en URL på Garmins auktoriseringsserver (t.ex. `https://connect.garmin.com/oauth2Confirm` med `response_type=code`, din `client_id`, `redirect_uri`, PKCE `code_challenge`, `code_challenge_method=S256` och `state`). 2. **Tokenbyte (backend)** Din server skickar `POST` till token-endpoint (t.ex. `https://diauth.garmin.com/di-oauth2-service/oauth/token`) med `grant_type=authorization_code`, `code`, `client_id`, `client_secret`, `redirect_uri` och PKCE `code_verifier`. 3. **Förnya** Innan access-token går ut: använd `grant_type=refresh_token` med refresh-token (se PDF för fält och svarsformat). 4. **Testa flödet** Garmin har verktyg på utvecklarsidan, t.ex. OAuth authorize user: [https://apis.garmin.com/tools/oauthAuthorizeUser](https://apis.garmin.com/tools/oauthAuthorizeUser) (kräver inloggning med **client ID** och **client secret** från appregistreringen.) ## 3. Behörigheter och aktivitetsdata - Efter samtycke: kontrollera vilka **scopes / behörigheter** användaren gett (t.ex. activity export). Wellness-endpoints i Garmins dokumentation (t.ex. user id, permissions) hjälper dig bekräfta vad du får hämta. - **Activity API** ger aktivitetsdetaljer och filer som **FIT**, **GPX** och **TCX** när data synkats till Garmin Connect från användarens enhet. - Exakta REST-sökvägar, frågeparametrar och push/ping-alternativ finns i **API-referensen** i developer portal efter godkännande – allt finns inte på den publika marknadssidan. ## 4. Koppla data till lotc 1. **Lagra token säkert** (miljövariabler eller valv för hemligheter). Committa aldrig `client_secret`, refresh-token eller access-token till git. 2. **Lista eller ta emot aktiviteter** via Activity API enligt dokumentationen för din integration (pull eller push). 3. **Ladda ner** aktivitetsfilen du behöver (t.ex. FIT eller GPX). 4. **Tolka** filen i Python (t.ex. `fitparse` för FIT eller `gpxpy` för GPX) och bygg samma struktur som `get_sample_workouts()`: - `route`: lista av `[latitud, longitud]` för kartpolylinjen. - `distance_km`, `duration_min`, `avg_pace_min_per_km` m.m. från sammanfattningsfält eller beräknat från spåret. 5. **Byt ut** anropet till `get_sample_workouts()` i `app/main.py` mot din funktion som laddar från Garmin (valfritt med lokal cache/databas). ## 5. FAQ och support - [Program FAQ](https://developer.garmin.com/gc-developer-program/) (länkad från Activity API-sidan). - För API-frågor efter godkännande: Garmins utvecklarstöd enligt portalen. ## 6. Checklista | Steg | Åtgärd | |------|--------| | 1 | Ansök om / få **Garmin Connect Developer Program**-tillgång för din produkt. | | 2 | Registrera app → **client_id** + **client_secret**, konfigurera **redirect URI** exakt. | | 3 | Implementera **OAuth 2.0 + PKCE** och **token refresh**. | | 4 | Anropa **Activity API** med `Authorization: Bearer` enligt portalens dokumentation. | | 5 | Ladda ner **FIT/GPX/TCX**, tolka till lat/lng och mätvärden, mata in `Workout`-liknande dicts i appen. |