Rest API for strava.cz.
Project description
Strava.cz rest API
Info
Toto je neoficiální rest api pro stravu.cz. V tomto dokumentu je popsáno vše co potřebuješ vědet o tomto API. Je zde také vysvětleno dopodrobna jak to celé funguje.
Docs
Instalace API
API nainstalujeme přes PyPI
pip install strava.cz_api
Import API
Na začátku tvé aplikace je nutné importovat API.
from api import StravaApi
Autorizace
Na začátku všeho je nutné se autorizovat. Komunikace se serverem probíhá pomocí SID a cookies. To je nutné získat.
Script
Jedna možnost získání SID je pomocí automatizovaného scriptu.
Importujeme API a classu na getnutí SID tokenu, poté vytvoříme objekt autorization_token. Nakonec zavoláme metodu .getSid(), která vrátí náš token.
from api import StravaApi, Sid
autorization_token = Sid("{username}", "{password}", {cislo_jidelny})
print(autorization_token.getSid())
Manuálně
- Otevřeme strava.cz
- Přihlásíme se
- Otevřeme devtools>network
- Reload page.
- Otevřeme
nactiVlastnostiPA - Headers>cookies. Payload>SID. Vložíme do kódu.
Initializace
Jakmile máme cookies a SID můžeme initializovat autorizaci v našem scriptu.
from api import StravaApi
api_session = StravaApi("00000000000000000000000000000000", "4242", "NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D")
- SID(str) - identifikační klíč komunikace, getnout pomocí Sid.getSid() nebo manuálně z dev tools, nutné
- cislo_jidelny(int) - číslo naší jídelny na kterou se přihlašujeme, nutné
- cookies(str) - můžeme vyplnit custom, ve většině případů -
NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D"
Momentálně jsme vytvořili náš objekt api_session. Je nutné mít validní SID. Také je nutné mít správné cookies, aby komunikace správně fungovala.
Examples jsou ve složce ./examples
Metody
Toto API má mnoho metod volání API endpointů. V následující části si rozebereme každou, jak ji použít a co vrátí.
Examples jsou ve složce ./examples
Public.getJidelnicek
- Vrátí jídelníček v json formátu. Pouze potřeba číslo jídelny.
- Nutné importovat public.
# importujeme class public
from api import Public
# vytiskneme jídelníček
print(Public.getJidelnicek("4242"))
.getJidelnicekToday
- Vrátí dnešní jídelníček v JSON formátu.
from api import StravaApi
# initializujeme spojení
api_session = StravaApi("00000000000000000000000000000000", "4242", "NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D")
# zavoláme endpoint
jidelnicek = api_session.getJidelnicekToday()
# vytiskneme náš jídelníček
print(jidelnicek)
.getJidelnicekAll
- Vrátí celý jídelníček v JSON formátu
from api import StravaApi
# initializujeme spojení
api_session = StravaApi("00000000000000000000000000000000", "4242", "NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D")
# zavoláme endpoint
jidelnicek = api_session.getJidelnicekAll()
# vytiskneme náš jídelníček
print(jidelnicek)
.getUsername
- Vrátí uživatelské jméno.
from api import StravaApi
# initializujeme spojení
api_session = StravaApi("00000000000000000000000000000000", "4242", "NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D")
# zavoláme endpoint
user = api_session.getUsername()
# vytiskneme uzivatelske jmeno
print(user)
.getInfo
- Vrátí jídelníček v json struktuře.
from api import StravaApi
# initializujeme spojení
api_session = StravaApi("00000000000000000000000000000000", "4242", "NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D")
# zavoláme endpoint
info = api_session.getInfo()
# vytiskneme info o uživateli a jídelně
print(info)
.getJidelna
- Získá informace o jídělně
from api import StravaApi
# initializujeme spojení
api_session = StravaApi("00000000000000000000000000000000", "4242", "NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D")
# zavoláme endpoint
info = api_session.getJidelna()
# vytiskneme info o jídelně
print(info)
.getHistorieKlienta
- Získá info o historii objednávek klienta v určitém měsíci.
- date(str) = počáteční datum měsíce.
- 2025-01-01 - leden
- 2025-12-01 - prosinec
from api import StravaApi
# initializujeme spojení
api_session = StravaApi("00000000000000000000000000000000", "4242", "NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D")
# zavoláme endpoint
info = api_session.getHistorieKlienta("2025-01-01")
# vytiskneme historii obejnávek klienta
print(info)
.getPlaby
- Vrátí pohyby na klientovém účtu
from api import StravaApi
# initializujeme spojení
api_session = StravaApi("00000000000000000000000000000000", "4242", "NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D")
# zavoláme endpoint
info = api_session.getPlaby()
# vytiskneme pohyby na klientovém účtu
print(info)
.getMessages
- Získá informace z jídelny
from api import StravaApi
# initializujeme spojení
api_session = StravaApi("00000000000000000000000000000000", "4242", "NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D")
# zavoláme endpoint
info = api_session.getMessages()
# vytiskneme informace z jídelny
print(info)
.postJidlo
- Přihlásí nebo ohlásí jídlo
- veta(int) - číslo itemu co chceme přihlásit
- stav(int) - 0 - odhlásit, 1 - přihlásit
from api import StravaApi
# initializujeme spojení
api_session = StravaApi("00000000000000000000000000000000", "4242", "NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D")
# zavoláme endpoint, přihlásíme veta 5
api_session.postJidlo(5, 1)
!!Objednávky je nutné uložit!! viz. postOrders()
.postDen
- Přihlásí nebo ohlásí celý den
- datum(str) = datum dne jaký chceme odhlásit. 2025-12-30
- stav(int) - 0 - odhlásit, 1 - přihlásit
from api import StravaApi
# initializujeme spojení
api_session = StravaApi("00000000000000000000000000000000", "4242", "NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D")
# zavoláme endpoint, přihlásíme 2025-12-30
api_session.postDen("2025-12-30", 1)
!!Objednávky je nutné uložit!! viz. postOrders()
.postOrders
- Uloží naše změny.
- Po použití metod postDen() a postJidlo() je nutné uložit naše změny a poslat je na server.
from api import StravaApi
# initializujeme spojení
api_session = StravaApi("00000000000000000000000000000000", "4242", "NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D")
# zavoláme endpoint, přihlásíme veta 5
api_session.postJidlo(5, 1)
# uložíme změny
api_session.postOrders()
Vysvětlení
Tento skript slouží k simulaci volání API endpointů používaných službou strava.cz. Každý požadavek musí obsahovat SID. Bez něj server požadavek odmítne. Každá akce ve webovém rozhraní (např. načtení jídelníčku, přihlášení oběda nebo uložení objednávky) odpovídá jednomu volání určitého API endpointu.
GET requesty
Při volání endpointů typu GET (například getJidelnicek) klient odešle dotaz, který musí vždy obsahovat platný SID a současně cookies uložené při přihlášení. Server poté na základě těchto údajů ověří identitu uživatele a vrátí odpověď ve formátu JSON. Tento JSON obsahuje například dostupné obědy, ceny nebo aktuální stav objednávek. Nejde tedy o HTML stránku, ale o čistá data určená pro strojové zpracování.
POST requesty
Endpointy typu POST se používají pro akce, kdy se odesílají změny nebo objednávky – typicky při přihlašování či odhlašování obědů.
- Uživatel si na webu vybere obědy, které chce přihlásit nebo odhlásit.
- Každý výběr odpovídá jednomu POST requestu, který se odešle spolu s aktuálními cookies.
- Server na základě požadavku upraví cookies (např. uloží rozpracovanou objednávku) a pošle je zpět klientovi.
- Klient může pokračovat ve výběru dalších jídel, přičemž se cookies s každým požadavkem aktualizují.
- Po dokončení výběru se odešle finální požadavek – obvykle typu uložit objednávku –, který pošle upravené cookies zpět na server. Server poté objednávku zpracuje a potvrdí ji.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file strava_cz_api-1.2.tar.gz.
File metadata
- Download URL: strava_cz_api-1.2.tar.gz
- Upload date:
- Size: 6.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
562c2d91fce66ca4085ddf974385d8ca1e7bbd8bcb3278be2366fc583d73f8d7
|
|
| MD5 |
5c9d9e25d16020e7d02276022d5785ef
|
|
| BLAKE2b-256 |
7fc0e63743ec0e0f778c0e98c2c18a9b147392532f2c6acb6e7962cc5360e1de
|
Provenance
The following attestation bundles were made for strava_cz_api-1.2.tar.gz:
Publisher:
python-publish.yml on kralicekgamer/strava.cz_api
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
strava_cz_api-1.2.tar.gz -
Subject digest:
562c2d91fce66ca4085ddf974385d8ca1e7bbd8bcb3278be2366fc583d73f8d7 - Sigstore transparency entry: 809395206
- Sigstore integration time:
-
Permalink:
kralicekgamer/strava.cz_api@65a222375632119928bdee85c4947aedaafbb4a4 -
Branch / Tag:
refs/tags/v1.2 - Owner: https://github.com/kralicekgamer
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@65a222375632119928bdee85c4947aedaafbb4a4 -
Trigger Event:
release
-
Statement type:
File details
Details for the file strava_cz_api-1.2-py3-none-any.whl.
File metadata
- Download URL: strava_cz_api-1.2-py3-none-any.whl
- Upload date:
- Size: 6.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
50506846423da943e74b3a6446016a9198ba5be380f36b265cd78b7c3b18c631
|
|
| MD5 |
9fd4a1d821bfdbcc3413381fac8cdb88
|
|
| BLAKE2b-256 |
6d76c9d45333c95089f73a3e1a050954106063e552d8ef33cf3725a4934eefdc
|
Provenance
The following attestation bundles were made for strava_cz_api-1.2-py3-none-any.whl:
Publisher:
python-publish.yml on kralicekgamer/strava.cz_api
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
strava_cz_api-1.2-py3-none-any.whl -
Subject digest:
50506846423da943e74b3a6446016a9198ba5be380f36b265cd78b7c3b18c631 - Sigstore transparency entry: 809395210
- Sigstore integration time:
-
Permalink:
kralicekgamer/strava.cz_api@65a222375632119928bdee85c4947aedaafbb4a4 -
Branch / Tag:
refs/tags/v1.2 - Owner: https://github.com/kralicekgamer
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@65a222375632119928bdee85c4947aedaafbb4a4 -
Trigger Event:
release
-
Statement type: