{"id":35828898,"url":"https://github.com/kralicekgamer/strava.cz_api","last_synced_at":"2026-01-12T09:39:14.157Z","repository":{"id":330894452,"uuid":"1110126846","full_name":"kralicekgamer/strava.cz_api","owner":"kralicekgamer","description":"unofficial strava.cz rest api","archived":false,"fork":false,"pushed_at":"2025-12-28T21:45:59.000Z","size":17,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-12-31T14:12:36.576Z","etag":null,"topics":["rest-api","unofficial-api"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kralicekgamer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-04T18:46:40.000Z","updated_at":"2025-12-28T21:46:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kralicekgamer/strava.cz_api","commit_stats":null,"previous_names":["kralicekgamer/strava.cz_api"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/kralicekgamer/strava.cz_api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kralicekgamer%2Fstrava.cz_api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kralicekgamer%2Fstrava.cz_api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kralicekgamer%2Fstrava.cz_api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kralicekgamer%2Fstrava.cz_api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kralicekgamer","download_url":"https://codeload.github.com/kralicekgamer/strava.cz_api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kralicekgamer%2Fstrava.cz_api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28337739,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T06:09:07.588Z","status":"ssl_error","status_checked_at":"2026-01-12T06:05:18.301Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["rest-api","unofficial-api"],"created_at":"2026-01-07T21:18:40.817Z","updated_at":"2026-01-12T09:39:14.152Z","avatar_url":"https://github.com/kralicekgamer.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Strava.cz rest API\n## Info \nToto 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.\n\n# Docs\n## Instalace API\nAPI nainstalujeme přes PyPI\n\n```\npip install strava.cz_api\n```\n\n## Import API\nNa začátku tvé aplikace je nutné importovat API.\n\n```py\nfrom api import StravaApi\n```\n\n## Autorizace\nNa začátku všeho je nutné se autorizovat. Komunikace se serverem probíhá pomocí SID a cookies. To je nutné získat. \n\n### Script\nJedna možnost získání SID je pomocí automatizovaného scriptu.\n\nImportujeme API a classu na getnutí SID tokenu, poté vytvoříme objekt autorization_token. Nakonec zavoláme metodu .getSid(), která vrátí náš token.\n\n```py\nfrom api import StravaApi, Sid\n\nautorization_token = Sid(\"{username}\", \"{password}\", {cislo_jidelny})\nprint(autorization_token.getSid())\n```\n\n### Manuálně\n1. Otevřeme strava.cz\n2. Přihlásíme se\n3. Otevřeme devtools\u003enetwork\n4. Reload page.\n5. Otevřeme `nactiVlastnostiPA`\n6. Headers\u003ecookies. Payload\u003eSID. Vložíme do kódu.\n\n\n## Initializace\nJakmile máme cookies a SID můžeme initializovat autorizaci v našem scriptu. \n\n```py\nfrom api import StravaApi\n\napi_session = StravaApi(\"00000000000000000000000000000000\", \"4242\", \"NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D\")\n```\n\n- SID(str) - identifikační klíč komunikace, getnout pomocí Sid.getSid() nebo manuálně z dev tools, nutné\n- cislo_jidelny(int) - číslo naší jídelny na kterou se přihlašujeme, nutné\n- 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\"`\n\nMomentá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.\n\n**Examples jsou ve složce ./examples**\n\n## Metody\nToto 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í. \n\n**Examples jsou ve složce ./examples**\n\n## Public.getJidelnicek\n- Vrátí jídelníček v json formátu. Pouze potřeba číslo jídelny. \n- Nutné importovat public.\n\n```py\n# importujeme class public\nfrom api import Public\n\n# vytiskneme jídelníček\nprint(Public.getJidelnicek(\"4242\"))\n```\n\n### .getJidelnicekToday\n- Vrátí dnešní jídelníček v JSON formátu.\n\n```py\nfrom api import StravaApi\n\n\n# initializujeme spojení\napi_session = StravaApi(\"00000000000000000000000000000000\", \"4242\", \"NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D\")\n\n# zavoláme endpoint\njidelnicek = api_session.getJidelnicekToday()\n\n# vytiskneme náš jídelníček\nprint(jidelnicek)\n```\n\n### .getJidelnicekAll\n- Vrátí celý jídelníček v JSON formátu\n\n```py\nfrom api import StravaApi\n\n\n# initializujeme spojení\napi_session = StravaApi(\"00000000000000000000000000000000\", \"4242\", \"NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D\")\n\n# zavoláme endpoint\njidelnicek = api_session.getJidelnicekAll()\n\n# vytiskneme náš jídelníček\nprint(jidelnicek)\n```\n\n### .getUsername\n- Vrátí uživatelské jméno.\n\n```py\nfrom api import StravaApi\n\n\n# initializujeme spojení\napi_session = StravaApi(\"00000000000000000000000000000000\", \"4242\", \"NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D\")\n\n# zavoláme endpoint\nuser = api_session.getUsername()\n\n# vytiskneme uzivatelske jmeno\nprint(user)\n```\n\n### .getInfo\n- Vrátí jídelníček v json struktuře.\n\n```py\nfrom api import StravaApi\n\n\n# initializujeme spojení\napi_session = StravaApi(\"00000000000000000000000000000000\", \"4242\", \"NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D\")\n\n# zavoláme endpoint\ninfo = api_session.getInfo()\n\n# vytiskneme info o uživateli a jídelně\nprint(info)\n```\n\n### .getJidelna\n- Získá informace o jídělně\n\n```py\nfrom api import StravaApi\n\n\n# initializujeme spojení\napi_session = StravaApi(\"00000000000000000000000000000000\", \"4242\", \"NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D\")\n\n# zavoláme endpoint\ninfo = api_session.getJidelna()\n\n# vytiskneme info o jídelně\nprint(info)\n```\n\n### .getHistorieKlienta\n- Získá info o historii objednávek klienta v určitém měsíci.\n- date(str) = počáteční datum měsíce. \n    - 2025-01-01 - leden\n    - 2025-12-01 - prosinec\n\n```py\nfrom api import StravaApi\n\n\n# initializujeme spojení\napi_session = StravaApi(\"00000000000000000000000000000000\", \"4242\", \"NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D\")\n\n# zavoláme endpoint\ninfo = api_session.getHistorieKlienta(\"2025-01-01\")\n\n# vytiskneme historii obejnávek klienta\nprint(info)\n```\n\n### .getPlaby\n- Vrátí pohyby na klientovém účtu\n\n```py\nfrom api import StravaApi\n\n\n# initializujeme spojení\napi_session = StravaApi(\"00000000000000000000000000000000\", \"4242\", \"NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D\")\n\n# zavoláme endpoint\ninfo = api_session.getPlaby()\n\n# vytiskneme pohyby na klientovém účtu\nprint(info)\n```\n\n### .getMessages\n- Získá informace z jídelny\n\n```py\nfrom api import StravaApi\n\n\n# initializujeme spojení\napi_session = StravaApi(\"00000000000000000000000000000000\", \"4242\", \"NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D\")\n\n# zavoláme endpoint\ninfo = api_session.getMessages()\n\n# vytiskneme informace z jídelny\nprint(info)\n```\n\n### .postJidlo\n- Přihlásí nebo ohlásí jídlo\n- veta(int) - číslo itemu co chceme přihlásit\n- stav(int) - 0 - odhlásit, 1 - přihlásit\n\n```py\nfrom api import StravaApi\n\n\n# initializujeme spojení\napi_session = StravaApi(\"00000000000000000000000000000000\", \"4242\", \"NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D\")\n\n# zavoláme endpoint, přihlásíme veta 5\napi_session.postJidlo(5, 1)\n```\n\n**!!Objednávky je nutné uložit!!** viz. postOrders()\n\n### .postDen\n- Přihlásí nebo ohlásí celý den\n- datum(str) = datum dne jaký chceme odhlásit. 2025-12-30\n- stav(int) - 0 - odhlásit, 1 - přihlásit\n\n```py\nfrom api import StravaApi\n\n\n# initializujeme spojení\napi_session = StravaApi(\"00000000000000000000000000000000\", \"4242\", \"NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D\")\n\n# zavoláme endpoint, přihlásíme 2025-12-30\napi_session.postDen(\"2025-12-30\", 1)\n```\n\n**!!Objednávky je nutné uložit!!** viz. postOrders()\n\n### .postOrders\n- Uloží naše změny. \n- Po použití metod postDen() a postJidlo() je nutné uložit naše změny a poslat je na server.\n\n```py\nfrom api import StravaApi\n\n\n# initializujeme spojení\napi_session = StravaApi(\"00000000000000000000000000000000\", \"4242\", \"NEXT_LOCALE=cs; multiContextSession=%7B%22printOpen%22%3A%7B%22value%22%3Afalse%2C%22expiration%22%3A-1%7D%7D\")\n\n# zavoláme endpoint, přihlásíme veta 5\napi_session.postJidlo(5, 1)\n\n# uložíme změny\napi_session.postOrders()\n```\n\n# Vysvětlení\nTento 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.\n\n## GET requesty\nPř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í.\n\n## POST requesty\nEndpointy 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ů.\n\n1. Uživatel si na webu vybere obědy, které chce přihlásit nebo odhlásit.\n2. Každý výběr odpovídá jednomu POST requestu, který se odešle spolu s aktuálními cookies.\n3. Server na základě požadavku upraví cookies (např. uloží rozpracovanou objednávku) a pošle je zpět klientovi.\n4. 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í.\n5. 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.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkralicekgamer%2Fstrava.cz_api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkralicekgamer%2Fstrava.cz_api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkralicekgamer%2Fstrava.cz_api/lists"}