Fabiobot: Vyzkoušíme Strava API a převedeme zdolané kilometry na kole na seřazené škodovky

Strava je nejpopulárnější sportovní aplikace pro amatéry i profíky. Služba nabízí také API, které si dnes vyzkoušíme. Převedeme zdolané kilometry na fabie

Strava je nejpopulárnější sportovní aplikace pro amatéry i profíky. Služba nabízí také API, které si dnes vyzkoušíme. Převedeme zdolané kilometry na fabie

Strava je nejpopulárnější aplikací pro záznam outdoorové aktivity počínaje nedělním výletem s rodinou na Kokořín a konče cestou na kole do práce 

Strava je nejpopulárnější aplikací pro záznam outdoorové aktivity počínaje nedělním výletem s rodinou na Kokořín a konče cestou na kole do práce 

Každý uživatel Stravy si může vytvořit aplikaci a přistupovat k datům pomocí API 

Každý uživatel Stravy si může vytvořit aplikaci a přistupovat k datům pomocí API 

Každý uživatel Stravy si může vytvořit aplikaci a přistupovat k datům pomocí API 

Každý uživatel Stravy si může vytvořit aplikaci a přistupovat k datům pomocí API 

Toto bude výsledek dnešních hrátek. Fabiobot se spojí skrze API s účtem uživatele, zjistí, kolik zaznamenal kilometrů na kole a tuto hodnotu vyjádří počtem seřazených fabií

Toto bude výsledek dnešních hrátek. Fabiobot se spojí skrze API s účtem uživatele, zjistí, kolik zaznamenal kilometrů na kole a tuto hodnotu vyjádří počtem seřazených fabií

Vstupní bod naší aplikace s žádostí o autorizaci

Vstupní bod naší aplikace s žádostí o autorizaci

Autorizační dialog na serveru Stravy

Autorizační dialog na serveru Stravy

Pokud v tom už máte pěkný guláš, snad vám napoví toto schéma celého autorizačního kolečka pomocí techniky OAuth

Pokud v tom už máte pěkný guláš, snad vám napoví toto schéma celého autorizačního kolečka pomocí techniky OAuth

Po úspěšné autorizaci se přístupový token a další údaje uloží do prohlížeče jako cookie s časovou platností tokenu. Několik dalších hodin se tedy nebudete muset znovu autorizovat

Po úspěšné autorizaci se přístupový token a další údaje uloží do prohlížeče jako cookie s časovou platností tokenu. Několik dalších hodin se tedy nebudete muset znovu autorizovat

Na webu Stravy pro vývojáře najdete podrobnou dokumentaci všech funkcí, které můžete volat skrze HTTP API i generátory volání pro různé programovací jazyky

Na webu Stravy pro vývojáře najdete podrobnou dokumentaci všech funkcí, které můžete volat skrze HTTP API i generátory volání pro různé programovací jazyky

Škoda Fabia IV. generace Foto:   Alexander Migl ,  CC BY-SA 4.0

Škoda Fabia IV. generace | Foto: Alexander Migl, CC BY-SA 4.0

Strava je nejpopulárnější aplikací pro záznam outdoorové aktivity počínaje nedělním výletem s rodinou na Kokořín a konče cestou na kole do práce 
Každý uživatel Stravy si může vytvořit aplikaci a přistupovat k datům pomocí API 
Každý uživatel Stravy si může vytvořit aplikaci a přistupovat k datům pomocí API 
Toto bude výsledek dnešních hrátek. Fabiobot se spojí skrze API s účtem uživatele, zjistí, kolik zaznamenal kilometrů na kole a tuto hodnotu vyjádří počtem seřazených fabií
11
Fotogalerie
  • Strava je nejpopulárnější sportovní aplikace pro amatéry i profíky
  • Služba nabízí také API, které si dnes vyzkoušíme
  • Převedeme zdolané kilometry na fabie

Letní prázdniny se nám přehouply do druhé poloviny a červencové tropy vystřídala zakaboněná obloha a déšť. Mnozí tedy nahradili opalovací krém za pohorky nebo třeba cyklistickou helmu.

Dnes se proto v našem seriálu o programování elektroniky seznámíme s aplikačním rozhraním pro vývojáře, které nabízí populární služba Strava.

e1ed6c45-0d54-4d1c-82e2-1d0e0b6d874f
Strava je nejpopulárnější aplikace pro záznam outdoorové aktivity počínaje nedělním výletem s rodinou na Kokořín a konče cestou na kole do práce 

API pro sportovce

Pokud vám tento web nic neříká, pravděpodobně nemáte v garáži kolo, nebo alespoň v botníku běžecké boty, Strava totiž patří k největším službám pro rekreační i profesionální sportovce, kteří zde ukládají své aktivity a poměřují se s ostatními.

01 strava api.png02 strava api.png
Každý uživatel Stravy si může vytvořit aplikaci a přistupovat k datům pomocí API 

Pro nás je podstatné to, že web nabízí i docela povedené aplikační rozhraní, které není určené jen pro velké ryby na trhu, ale i pro domácí kutily. Ti si mohou po registraci účtu vytvořit zdarma jednu soukromou aplikaci, která dokáže strojově pracovat prakticky se všemi daty sportovců, kteří vpustí apku k sobě na profil.

Fabiobot převede kilometry na škodovky

Podobná základní aplikace může provést 200 dotazů do databáze služby každých 15 minut, nejvýše ale 2 000 dotazů denně. Hodí se tedy opravdu pro malé osobní projekty. Takový prográmek by mohl třeba vám a vašim blízkým počítat nejrůznější statistiky, které jinak nejsou součástí samotné Stravy.

3dacf294-d4a0-40d8-a920-6a2dc3214557
Toto bude výsledek dnešních hrátek. Fabiobot se spojí skrze API s účtem uživatele, zjistí, kolik zaznamenal kilometrů na kole a tuto hodnotu vyjádří počtem seřazených fabií 

Dnes si to vyzkoušíme, abychom ale začátečníky hned na začátku nevyděsili hromadou složitého kódu, vyrobíme si naprosto primitivní aplikaci Fabiobot. Znalci internetových vtípků a memů už jistě tuší, co bude jejím úkolem. Náš Fabiobot spočítá vaše na kole ujeté kilometry a převede je na počet fábií postavených jedna za druhou.

Děláme si tak legraci z legendárních mediálních zkratek, kdy občas tiskem prolétl přepočet, kolik fábií za sebou měřil na délku R.M.S. Titanic, kolik fotbalových hřišť zabere Mezinárodní vesmírná stanice a tak podobně.

Autentizační ping-pong standardu OAuth

Fabiobot se bude skládat z webového serveru napsaného v Pythonu a z HTML/JS stránky se samotnou uživatelskou statistikou. Server spustíme na lokálním počítači, takže bude dostupný na místní IP adrese 127.0.0.1. V produkční verzi bychom jej mohli umístit někam na veřejný internet, na NAS, pokud to umožňuje, Raspberry Pi atp.

78196e25-2564-4ec6-b203-8dabd7b44a9c
Vstupní bod naší aplikace s žádostí o autorizaci

Největší překážkou pro začátečníky bude komplexní autentizace typu OAuth – Open Authorization. V praxi to znamená, že k API nepřistupujeme podobně jako minule pomocí nějakého vlastního a pevně daného klíče, ale musíme vygenerovat dočasný klíč pro každého uživatele Stravy, který bude chtít používat Fabiobot.

Generování dočasného klíče – tokenu – nebudeme dělat přímo my, ale provede to sám uživatel po vstupu na web Fabiobotu. Najde na něm totiž velké tlačítko „Autorizuj mě,“ které po klepnutí návštěvníka přesměruje na adresu:

strava.com/oauth/authorize?client_id=108836
&response_type=code
&redirect_uri=http://127.0.0.1/fabiobot/exchange_token
&approval_prompt=force
&scope=activity:read_all

Po načtení adresy se zobrazí autorizační dialog Stravy, který návštěvníka požádá, aby se přihlásil svým účtem a potvrdil práva, o která žádá aplikace Fabiobot. Tu v adrese reprezentuje její jedinečný identifikátor 108836 a práva pak parametr scope a jeho hodnota activity:read_all.

Žádáme tedy o přístup k základním informacím o sportovci, ale zároveň o přístup ke všem jeho aktivitám. V našem dnešním příkladu to sice až tak nevyužijeme, stejná práva ale budete potřebovat, pokud byste si chtěli naprogramovat třeba aplikaci, která bude přistupovat ke všem sportovním záznamům v celé vaši historii. Třeba kdybyste si chtěli naprogramovat vlastní mapu projetých tras a tak podobně.

45dc1081-a123-4435-83ae-481b77bcea65
Autorizační dialog na serveru Stravy

Jakmile návštěvník potvrdí dialog, Strava jej v prohlížeči přesměruje na adresu, která je součástí původní URL a my ji také ztučnili: 127.0.0.1/fabiobot/exchange_token.

Ještě jednou, příklad testujeme na lokálně spuštěném serveru, takže nás Strava přesměruje právě na ten. V produkční verzi bychom nahradili záznam třeba doménou fabiobot.cz, veřejnou IP adresou apod.

Ping-pong pokračuje žádostí o přístupový token

Celá adresa, na kterou Strava přesměruje komunikaci a doplní pár svých parametrů, bude nakonec vypadat zhruba takto:

127.0.0.1/fabiobot/exchange_tokenstate=
&code=155csca52cfa2ff5waf2wfaf4
&scope=read,activity:read_all

Strava v parametru scope potvrzuje udělená práva, naprosto klíčovou hodnotou pro dokončení autentizačního OAuth ping-pongu je ale hodnota parametru code. Obsahuje dočasný token, který použijeme k finální žádosti o vygenerování přístupového tokenu pro právě řešeného uživatele.

HTTP žádost o vygenerování přístupového tokenu bude vypadat takto:

strava.com/oauth/token?client_id=108836
&client_secret=secret
&code=155csca52cfa2ff5waf2wfaf4
&grant_type=authorization_code

Všimněte si, že je součástí adresy opět numerický identifikátor naší aplikace client_id, zároveň dočasný code, který jsme získali v předchozím kroku, a ještě alfanumerický řetězec secret, který společně s numerickým identifikátorem aplikace najdeme v její konfiguraci na webu Stravy (viz odkaz v úvodu).

Jakmile dotaz odešleme, webový server Stravy konečně odpoví strukturou JSON, ve které jsou uložené přístupové údaje pro uživatele. Když jsem se tedy tímto způsobem přihlásil k Fabiobotu pod svým uživatelským jménem Jakuba Čížka, dorazila tato odpověď:

{
  "token_type": "Bearer",
  "expires_at": 1687993572,
  "expires_in": 21600,
  "refresh_token": "5eed5fd25sd5ffgds5g5dg5gsr2",
  "access_token": "55f858rsg55gs5r2r2vr5g2g2grd",
  "athlete": {
    "id": 21641236,
    "username": "ek_jakub",
    "firstname": "Jakub",
    "lastname": "Čížek",
    "city": "Brno",
    "state": "Jihomoravský kraj",
    "country": "Česko",
    "sex": "M",
    "premium": true,
    "created_at": "2017-05-02T12:17:05Z",
    "updated_at": "2022-10-16T22:00:13Z",
  }
}

JSON jsem o něco málo zkrátil, aby se nám vůbec vešel do článku. Na první pohled je jasné, že obsahuje popisné informace o sportovci na Stravě, pro nás jsou v tuto chvíli ale zdaleka nejdůležitější hodnoty access_token a expires_at. Access_token je klíč, který může Fabiobot používat při dotazování se na Strava API, přičemž služba bude vědět, k čemu všemu má token práva a k jakému uživateli a aplikaci se váže.

Jak už ale napovídá druhá zmíněná hodnota expires_at, přístupový klíč má omezenou časovou platnost, takže za pár hodin už nebude fungovat a musíme celé autentizační kolečko zopakovat.

e9e89eb2-297a-4865-8b6e-f1be9e841aef
Pokud v tom už máte pěkný guláš, snad vám napoví toto schéma celého autorizačního kolečka pomocí techniky OAuth

Pokračování článku patří k prémiovému obsahu pro předplatitele

Chci Premium a Živě.cz bez reklam Od 41 Kč měsíčně

Určitě si přečtěte

Články odjinud