High level API pro interakci s webovou aplikaci Strava.cz
Project description
Strava.cz Python API
High level API pro interakci s webovou aplikaci Strava.cz udelane v Pythonu ciste pomoci request knihovny.
Ve slozce notes muzete najit veskere moje poznatky, ktere jsem zjistil o internim fungovani aplikace Strava.cz.
Features
- Prihlaseni/odhlaseni systemu
- Vypsani a filtrace jidelnicku
- Objednavani a odhlasovani jidel podle ID jidla
- Automaticke filtrovani jidel podle typu a objednatelnosti
- Vyhledavani jidel podle ID nebo data
- Ulozeni raw i zpracovanych dat z API
- Sledovani zustatku na uctu
Usage
pip install strava-cz
from strava_cz import StravaCZ, MealType, OrderType
# Vytvoreni objektu strava a prihlaseni uzivatele
strava = StravaCZ(
username="your.username",
password="YourPassword123",
canteen_number="your canteen number" # POVINNY parametr
)
# Vypsani informaci o uzivateli
print(strava.user)
print(f"Zustatok: {strava.user.balance} Kč")
# Ziskani jidelnicku
strava.menu.fetch()
strava.menu.print()
# Pristup k jidelnicku podle dni
days = strava.menu.get_days() # Default - vsechna objednavatelna jidla
print(f"Vsechny jidla: {len(days)} dni")
# Pristup k jidlum jako ploschy seznam
meals = strava.menu.get_meals() # Vsechna jidla jako ploschy seznam
main_meals = strava.menu.get_meals(meal_types=[MealType.MAIN]) # Pouze hlavni jidla
soup_meals = strava.menu.get_meals(meal_types=[MealType.SOUP]) # Pouze polevky
# Vcetne volitelnych jidel
complete = strava.menu.get_days(
order_types=[OrderType.NORMAL, OrderType.OPTIONAL]
)
# Iterace pres menu (default seznam)
for day in strava.menu:
print(f"Datum: {day['date']}, Pocet jidel: {len(day['meals'])}")
# Zjisti, jestli je jidlo s meal_id 4 objednano (True/False)
print(strava.menu.is_ordered(4))
# Objedna jidla s meal_id 3 a 6
# Automaticky detekuje duplicity a kontroluje typ jidla
strava.menu.order_meals(3, 6)
# Objednani s pokrocilymi parametry
strava.menu.order_meals(
3, 6,
continue_on_error=True, # Pokracuj i pri chybach
strict_duplicates=False # Pouze varuj pri duplikatech
)
# Ziskani vsech objednanych jidel
ordered = strava.menu.get_meals(ordered=True)
# Ziskani jidelnicku podle konkretniho data (prohledava vsechny seznamy)
today_menu = strava.menu.get_by_date("2025-11-04")
# Zrus objednavky
strava.menu.cancel_meals(3, 6)
# Odhlasi uzivatele
strava.logout()
meal_id je unikatni identifikacni cislo jidla v celem jidelnicku. neni ovsem stale vazane na konkretni jidlo a meni se se zmenami jidelnicku kazdy den
Pozor! Verze 0.2.0 obsahuje breaking changes. Prosim precti si migration guide pro vice informaci o pruchodu na novou verzi.
Struktura dat jidla
Kazde jidlo v menu obsahuje nasledujici polozky:
id[int] - Unikatni identifikacni cislo jidlatype[MealType] - Typ jidla (MealType.SOUP nebo MealType.MAIN)orderType[OrderType] - Typ objednavky (OrderType.NORMAL, OrderType.RESTRICTED, OrderType.OPTIONAL)name[str] - Nazev jidlaprice[float] - Cena jidlaordered[bool] - Zda je jidlo objednanoalergens[str] - AlergenyforbiddenAlergens[str] - Zakazane alergeny
Enumy
MealType - Typy jidel:
SOUP- PolevkaMAIN- Hlavni jidlo
OrderType - Typy objednavek:
NORMAL- Normalni objednavatelne jidloRESTRICTED- Jidlo, ktere uz nelze objednat (prilis pozde - "CO")OPTIONAL- Jidlo, ktere obvykle neni objednavano, ale muze byt ("T")
Menu class
Vlastnosti (Properties)
| vlastnost | typ | popis |
|---|---|---|
raw_data |
dict | Surova odpoved z API bez zpracovani |
Hlavni Metody
| funkce | parametry | return type | popis |
|---|---|---|---|
fetch() |
None | Menu | Ziska jidelnicek z API a zpracuje ho; vraci sam sebe |
print() |
None | None | Vypise zformatovane menu (default: pouze objednavatelna jidla) |
get_days() |
meal_types=None, order_types=None, ordered=None | list | Vrati jidla seskupena podle dni: [{date, ordered, meals: [...]}] |
get_meals() |
meal_types=None, order_types=None, ordered=None | list | Vrati vsechna jidla jako ploschy seznam: [{...meal}] |
order_meals() |
*meal_ids, continue_on_error=False, strict_duplicates=False | None | Objedna vice jidel; detekuje duplicity a kontroluje typy |
cancel_meals() |
*meal_ids, continue_on_error=False | None | Zrusi objednavky vice jidel |
Parametry filtrovani:
meal_types- Seznam typu jidel k ziskani (napr.[MealType.SOUP, MealType.MAIN]). None = vsechny typyorder_types- Seznam typu objednavek k ziskani (napr.[OrderType.NORMAL, OrderType.OPTIONAL]). None = pouze[OrderType.NORMAL]ordered- Filtrovani podle stavu objednavky:True= pouze objednane,False= pouze neobjednane,None= vse
Priklady:
# Vsechna objednavatelna jidla podle dni (default)
menu.get_days()
# Vsechna jidla jako flat seznam
menu.get_meals()
# Pouze polevky
menu.get_meals(meal_types=[MealType.SOUP])
# Pouze objednana jidla
menu.get_meals(ordered=True)
# Vcetne omezenych a volitelnych jidel
menu.get_days(order_types=[OrderType.NORMAL, OrderType.RESTRICTED, OrderType.OPTIONAL])
Pomocne Metody
| funkce | parametry | return type | popis |
|---|---|---|---|
get_by_date() |
date [str] | dict/None | Vrati jidla pro konkretni datum (prohledava vsechny typy objednavek) |
get_by_id() |
meal_id [int] | dict/None | Vrati konkretni jidlo podle ID (prohledava vsechny typy objednavek) |
is_ordered() |
meal_id [int] | bool | Zjisti, jestli je dane jidlo objednano (prohledava vsechny typy objednavek) |
Parametry objednavani
continue_on_error- Pokud True, pokracuje pri chybach a sbirá je; pokud False (default), zastavi pri prvni chybestrict_duplicates- Pokud True, vyhodit chybu pri vice jidlech ze stejneho dne; pokud False (default), pouze varuje a objedna prvni
Poznamka: Menu objekt podporuje iteraci, indexovani a len() - vse pracuje s defaultnim seznamem objednatelnych jidel.
Exceptions
Knihovna nabizi specialni vyjimky pro ruzne chybove stavy:
| Exception | Popis |
|---|---|
StravaAPIError |
Zakladni vyjimka pro vsechny API chyby |
AuthenticationError |
Chyba pri prihlaseni nebo pokud uzivatel neni prihlasen |
InsufficientBalanceError |
Nedostatecny zustatek na uctu pro objednani jidla |
InvalidMealTypeError |
Pokus o objednani/zruseni jidla, ktere nelze modifikovat (polevka) |
DuplicateMealError |
Pokus o objednani vice jidel ze stejneho dne (strict mode) |
Priklad pouziti:
from strava_cz import StravaCZ, InvalidMealTypeError, InsufficientBalanceError, DuplicateMealError
strava = StravaCZ("user", "pass", "1234")
strava.menu.fetch()
try:
# Pokus o objednani polevky (vyhodit InvalidMealTypeError)
strava.menu.order_meals(75) # ID polevky
except InvalidMealTypeError as e:
print(f"Chyba: {e}")
try:
# Pokus o objednani vice jidel ze stejneho dne
strava.menu.order_meals(1, 2, strict_duplicates=True)
except DuplicateMealError as e:
print(f"Duplicita: {e}")
try:
# Pokus o objednani draheho jidla
strava.menu.order_meals(100)
except InsufficientBalanceError as e:
print(f"Nedostatecny zustatek: {e}")
print(f"Aktualni zustatek: {strava.user.balance} Kč")
StravaCZ class
| funkce | parametry | return type | popis |
|---|---|---|---|
__init__() (=StravaCZ()) |
username=None, password=None, canteen_number=None | None | Inicializuje objekt StravaCZ a automaticky prihlasi uzivatele, pokud jsou vyplnene vsechny tri parametry |
login() |
username [str], password [str], canteen_number [str] | User | Prihlasi uzivatele pomoci uzivatelskeho jmena, hesla a cisla jidelny (vsechny parametry jsou povinne) |
logout() |
None | bool | Odhlasi uzivatele |
to-do
- Nahrat jako knihovnu na PyPi
- Lepe zorganizovat kod
- Lepsi datum format
- Moznost detailnejsi filtrace jidelnicku
- Kontrola stavu po objednani
- Filtrace dnu, ktere nejdou objednat
- Lepsi testing
- Balance check pred objednanim
- Detekce a prevence duplicitnich objednavek
- Kontrola typu jidla pri objednavani
- Lepe zdokumentovat pouziti
- Rate limiting
- Zrychleni interakce
- Debug/Log mode
Known bugs
Co bude dal?
Planuji udelat aplikaci, ktera bude uzivateli automaticky objednavat obedy podle jeho preferenci.
Prosim, nepouzivejte tuto aplikaci k nekalym ucelum. Pouzivejte ji pouze s dobrymi zamery.
Pomoz mi pls
Nasel jsi chybu nebo mas navrh na zlepseni? Skvele! Vytvor prosim bug report nebo feature request, hodne mi tim muzes pomoct.
Udelal jsi sam nejake zlepseni? Jeste lepsi! Kazdy pull request je vitan.
Pouziti AI
Na tento projekt byly do jiste miry vyuzity modely LLM, primarne na formatovani a dokumentaci kodu. V projektu nebyl ani nebude tolerovan cisty vibecoding.
Zaznamy konkretniho pouziti:
- Kontrola syntaxe kodu a repetetivni upravy detailu
- Vytvoreni testu
- Vytvoreni example.py
- Uprava a ladeni README
- Obcasny zapis do CHANGELOGu
- Vytvoreni MIGRATION GUIDE
Project details
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-0.2.0.tar.gz.
File metadata
- Download URL: strava_cz-0.2.0.tar.gz
- Upload date:
- Size: 32.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eca7d8291012fb14ffd8f6aa7f26940436dafd72d9409b9b8c8059181f46c111
|
|
| MD5 |
dc503ea5a9ab9f9ea9dfdeeafeb2f6cb
|
|
| BLAKE2b-256 |
ec06962da7458c23e2c3bed421e2ef3dabd198ec60e2611b3a9be3871ed1ab60
|
Provenance
The following attestation bundles were made for strava_cz-0.2.0.tar.gz:
Publisher:
publish.yml on jsem-nerad/strava-cz-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
strava_cz-0.2.0.tar.gz -
Subject digest:
eca7d8291012fb14ffd8f6aa7f26940436dafd72d9409b9b8c8059181f46c111 - Sigstore transparency entry: 692958261
- Sigstore integration time:
-
Permalink:
jsem-nerad/strava-cz-python@708ddf98da2c2f7b239d25ac1399349d799475cc -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/jsem-nerad
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@708ddf98da2c2f7b239d25ac1399349d799475cc -
Trigger Event:
push
-
Statement type:
File details
Details for the file strava_cz-0.2.0-py3-none-any.whl.
File metadata
- Download URL: strava_cz-0.2.0-py3-none-any.whl
- Upload date:
- Size: 24.9 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 |
cce3b1506e1bb1af24ce7346954eeac13ff6aaedbdce98ed6ca8e0c6c4fcc678
|
|
| MD5 |
a6a03ac3ca9e2495391b49763e745d98
|
|
| BLAKE2b-256 |
bd5982c2f259633433d928a41372695f319269a833dc3219410847a28ad62956
|
Provenance
The following attestation bundles were made for strava_cz-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on jsem-nerad/strava-cz-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
strava_cz-0.2.0-py3-none-any.whl -
Subject digest:
cce3b1506e1bb1af24ce7346954eeac13ff6aaedbdce98ed6ca8e0c6c4fcc678 - Sigstore transparency entry: 692958277
- Sigstore integration time:
-
Permalink:
jsem-nerad/strava-cz-python@708ddf98da2c2f7b239d25ac1399349d799475cc -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/jsem-nerad
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@708ddf98da2c2f7b239d25ac1399349d799475cc -
Trigger Event:
push
-
Statement type: