strava.cz-api 2.3__tar.gz → 2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {strava_cz_api-2.3/strava_cz_api.egg-info → strava_cz_api-2.4}/PKG-INFO +67 -1
- {strava_cz_api-2.3 → strava_cz_api-2.4}/README.md +66 -0
- {strava_cz_api-2.3 → strava_cz_api-2.4}/pyproject.toml +1 -1
- {strava_cz_api-2.3 → strava_cz_api-2.4}/strava_cz_api/__init__.py +1 -0
- strava_cz_api-2.4/strava_cz_api/filter.py +61 -0
- {strava_cz_api-2.3 → strava_cz_api-2.4}/strava_cz_api/strava.py +1 -1
- {strava_cz_api-2.3 → strava_cz_api-2.4/strava_cz_api.egg-info}/PKG-INFO +67 -1
- {strava_cz_api-2.3 → strava_cz_api-2.4}/strava_cz_api.egg-info/SOURCES.txt +1 -0
- {strava_cz_api-2.3 → strava_cz_api-2.4}/LICENSE +0 -0
- {strava_cz_api-2.3 → strava_cz_api-2.4}/examples/login.py +0 -0
- {strava_cz_api-2.3 → strava_cz_api-2.4}/examples/public_jidelnicek.py +0 -0
- {strava_cz_api-2.3 → strava_cz_api-2.4}/examples/user_info.py +0 -0
- {strava_cz_api-2.3 → strava_cz_api-2.4}/setup.cfg +0 -0
- {strava_cz_api-2.3 → strava_cz_api-2.4}/strava_cz_api/action.py +0 -0
- {strava_cz_api-2.3 → strava_cz_api-2.4}/strava_cz_api.egg-info/dependency_links.txt +0 -0
- {strava_cz_api-2.3 → strava_cz_api-2.4}/strava_cz_api.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: strava-cz-api
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4
|
|
4
4
|
Summary: Rest API for strava.cz.
|
|
5
5
|
Author-email: Matěj Adamec <kralyk@kralyk.dev>
|
|
6
6
|
Requires-Python: >=3.8
|
|
@@ -73,6 +73,16 @@ api = Api(
|
|
|
73
73
|
| `postOrders()` | Uložit změny objednávek | Nutné po `postJidlo`/`postDen` |
|
|
74
74
|
| `resetChanges()` | Resetuje neuložené změny v komunikaci. | Dobré pro zrušení změn pří objednávkách
|
|
75
75
|
|
|
76
|
+
## Filtr
|
|
77
|
+
Filtr existuje, ale je to **pre‑release**: může obsahovat chyby a bude se dál rozšiřovat. Lze ho importovat (`from strava_cz_api import Filter`), ale zatím není zaručeno, že všude funguje správně.
|
|
78
|
+
|
|
79
|
+
```py
|
|
80
|
+
from strava_cz_api import Filter
|
|
81
|
+
|
|
82
|
+
filtrovano = Filter.filter_json(["veta"], api.getJidelnicekAll())
|
|
83
|
+
print(filtrovano)
|
|
84
|
+
```
|
|
85
|
+
|
|
76
86
|
## Objednávky – správný postup
|
|
77
87
|
Změny objednávek se ukládají ve dvou krocích:
|
|
78
88
|
1. Provedení změn (`postJidlo` nebo `postDen`)
|
|
@@ -94,6 +104,62 @@ Většina metod vrací JSON string. Metody `postJidlo`, `postDen` a `postOrders`
|
|
|
94
104
|
## Příklady
|
|
95
105
|
Ukázkové skripty najdeš ve složce `./examples`.
|
|
96
106
|
|
|
107
|
+
## Json struktura
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"tableX": [
|
|
111
|
+
{
|
|
112
|
+
"id": 0,
|
|
113
|
+
"datum": "30.06.2026", // datum
|
|
114
|
+
"druh_popis": "Polévka", // část
|
|
115
|
+
"druh_chod": "Oběd", // chod
|
|
116
|
+
"nazev": "Polévka 1", // název chodu (oběd č. 1)
|
|
117
|
+
"popis": "Snídaně", // popis chodu
|
|
118
|
+
"delsiPopis": "", // delší popis chodu
|
|
119
|
+
"zakazaneAlergeny": null, // ??
|
|
120
|
+
"alergeny_text": "", // alergeny
|
|
121
|
+
"alergeny": [], // alergeny
|
|
122
|
+
"chod": "C", // číslo chodu (A = snídaně, B, C)
|
|
123
|
+
"druh": "OB", // druh chodu ve zkratce
|
|
124
|
+
"cena": "45.00", // cena
|
|
125
|
+
"polevka": "N", // zda pole je polévka (je v ceně)
|
|
126
|
+
"pocet": 1, // 1 = přihlášeno, 0 = odhlášeno
|
|
127
|
+
"veta": "172", // id políčka
|
|
128
|
+
"vetaDieta": "196", // ??
|
|
129
|
+
"omezeniObj": { // ???
|
|
130
|
+
"den": "",
|
|
131
|
+
"obj": "",
|
|
132
|
+
"zm": "",
|
|
133
|
+
"bur": "C"
|
|
134
|
+
},
|
|
135
|
+
"burza": { // ???
|
|
136
|
+
"zmena": "0",
|
|
137
|
+
"ostatni": "0",
|
|
138
|
+
"nabidka": "0",
|
|
139
|
+
"poptavka": "0"
|
|
140
|
+
},
|
|
141
|
+
"vydejniMisto": { // kde se vydává oběd (škola má více jídelních budov)
|
|
142
|
+
"misto": "2",
|
|
143
|
+
"mista": "2"
|
|
144
|
+
},
|
|
145
|
+
"diety": { // ??
|
|
146
|
+
"dieta": "",
|
|
147
|
+
"diety": ""
|
|
148
|
+
},
|
|
149
|
+
"zkratkaProduktu": "OB", // zkratka produktu (identické jako chod, u polévky chybí??)
|
|
150
|
+
"cisloJidelnicku": "1", // ??
|
|
151
|
+
"multipleNazev": "1NOběd č. 1COB", // ??
|
|
152
|
+
"version": 5, // ??
|
|
153
|
+
"casKonec": "2026-06-29T11:50:00", // do kdy lze přihlásit
|
|
154
|
+
"casOdhlaseni": "2026-06-29T11:50:00", // do kdy lze přihlásit
|
|
155
|
+
"obrazky": []
|
|
156
|
+
},
|
|
157
|
+
...
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
- Mnoho polí není vyplněno. Zda víte co to je, doplňte to nebo mě kontaktujte.
|
|
162
|
+
|
|
97
163
|
## Demo
|
|
98
164
|
- Demo uživatele si lze vytvořit na https://www.strava.cz/strava/Stravnik/Demo
|
|
99
165
|
- Poté se lze přihlásit na https://app.strava.cz/ na jídelně `0000`
|
|
@@ -63,6 +63,16 @@ api = Api(
|
|
|
63
63
|
| `postOrders()` | Uložit změny objednávek | Nutné po `postJidlo`/`postDen` |
|
|
64
64
|
| `resetChanges()` | Resetuje neuložené změny v komunikaci. | Dobré pro zrušení změn pří objednávkách
|
|
65
65
|
|
|
66
|
+
## Filtr
|
|
67
|
+
Filtr existuje, ale je to **pre‑release**: může obsahovat chyby a bude se dál rozšiřovat. Lze ho importovat (`from strava_cz_api import Filter`), ale zatím není zaručeno, že všude funguje správně.
|
|
68
|
+
|
|
69
|
+
```py
|
|
70
|
+
from strava_cz_api import Filter
|
|
71
|
+
|
|
72
|
+
filtrovano = Filter.filter_json(["veta"], api.getJidelnicekAll())
|
|
73
|
+
print(filtrovano)
|
|
74
|
+
```
|
|
75
|
+
|
|
66
76
|
## Objednávky – správný postup
|
|
67
77
|
Změny objednávek se ukládají ve dvou krocích:
|
|
68
78
|
1. Provedení změn (`postJidlo` nebo `postDen`)
|
|
@@ -84,6 +94,62 @@ Většina metod vrací JSON string. Metody `postJidlo`, `postDen` a `postOrders`
|
|
|
84
94
|
## Příklady
|
|
85
95
|
Ukázkové skripty najdeš ve složce `./examples`.
|
|
86
96
|
|
|
97
|
+
## Json struktura
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"tableX": [
|
|
101
|
+
{
|
|
102
|
+
"id": 0,
|
|
103
|
+
"datum": "30.06.2026", // datum
|
|
104
|
+
"druh_popis": "Polévka", // část
|
|
105
|
+
"druh_chod": "Oběd", // chod
|
|
106
|
+
"nazev": "Polévka 1", // název chodu (oběd č. 1)
|
|
107
|
+
"popis": "Snídaně", // popis chodu
|
|
108
|
+
"delsiPopis": "", // delší popis chodu
|
|
109
|
+
"zakazaneAlergeny": null, // ??
|
|
110
|
+
"alergeny_text": "", // alergeny
|
|
111
|
+
"alergeny": [], // alergeny
|
|
112
|
+
"chod": "C", // číslo chodu (A = snídaně, B, C)
|
|
113
|
+
"druh": "OB", // druh chodu ve zkratce
|
|
114
|
+
"cena": "45.00", // cena
|
|
115
|
+
"polevka": "N", // zda pole je polévka (je v ceně)
|
|
116
|
+
"pocet": 1, // 1 = přihlášeno, 0 = odhlášeno
|
|
117
|
+
"veta": "172", // id políčka
|
|
118
|
+
"vetaDieta": "196", // ??
|
|
119
|
+
"omezeniObj": { // ???
|
|
120
|
+
"den": "",
|
|
121
|
+
"obj": "",
|
|
122
|
+
"zm": "",
|
|
123
|
+
"bur": "C"
|
|
124
|
+
},
|
|
125
|
+
"burza": { // ???
|
|
126
|
+
"zmena": "0",
|
|
127
|
+
"ostatni": "0",
|
|
128
|
+
"nabidka": "0",
|
|
129
|
+
"poptavka": "0"
|
|
130
|
+
},
|
|
131
|
+
"vydejniMisto": { // kde se vydává oběd (škola má více jídelních budov)
|
|
132
|
+
"misto": "2",
|
|
133
|
+
"mista": "2"
|
|
134
|
+
},
|
|
135
|
+
"diety": { // ??
|
|
136
|
+
"dieta": "",
|
|
137
|
+
"diety": ""
|
|
138
|
+
},
|
|
139
|
+
"zkratkaProduktu": "OB", // zkratka produktu (identické jako chod, u polévky chybí??)
|
|
140
|
+
"cisloJidelnicku": "1", // ??
|
|
141
|
+
"multipleNazev": "1NOběd č. 1COB", // ??
|
|
142
|
+
"version": 5, // ??
|
|
143
|
+
"casKonec": "2026-06-29T11:50:00", // do kdy lze přihlásit
|
|
144
|
+
"casOdhlaseni": "2026-06-29T11:50:00", // do kdy lze přihlásit
|
|
145
|
+
"obrazky": []
|
|
146
|
+
},
|
|
147
|
+
...
|
|
148
|
+
]
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
- Mnoho polí není vyplněno. Zda víte co to je, doplňte to nebo mě kontaktujte.
|
|
152
|
+
|
|
87
153
|
## Demo
|
|
88
154
|
- Demo uživatele si lze vytvořit na https://www.strava.cz/strava/Stravnik/Demo
|
|
89
155
|
- Poté se lze přihlásit na https://app.strava.cz/ na jídelně `0000`
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import json
|
|
2
|
+
|
|
3
|
+
class Filter:
|
|
4
|
+
@staticmethod
|
|
5
|
+
def filter_json(items, jidelnicek):
|
|
6
|
+
if isinstance(items, (str, bytes)):
|
|
7
|
+
keywords = [items]
|
|
8
|
+
elif items is None:
|
|
9
|
+
keywords = []
|
|
10
|
+
else:
|
|
11
|
+
keywords = list(items)
|
|
12
|
+
|
|
13
|
+
keywords = [str(k).lower() for k in keywords if k is not None and str(k).strip()]
|
|
14
|
+
|
|
15
|
+
is_string_input = isinstance(jidelnicek, str)
|
|
16
|
+
data = json.loads(jidelnicek) if is_string_input else jidelnicek
|
|
17
|
+
|
|
18
|
+
if not keywords:
|
|
19
|
+
return json.dumps(data, ensure_ascii=False, indent=2) if is_string_input else data
|
|
20
|
+
|
|
21
|
+
filtered = Filter._filter_top_level(data, keywords)
|
|
22
|
+
return json.dumps(filtered, ensure_ascii=False, indent=2) if is_string_input else filtered
|
|
23
|
+
|
|
24
|
+
@staticmethod
|
|
25
|
+
def _filter_top_level(data, keywords):
|
|
26
|
+
if isinstance(data, dict):
|
|
27
|
+
filtered = {}
|
|
28
|
+
for key, value in data.items():
|
|
29
|
+
if isinstance(value, list):
|
|
30
|
+
filtered[key] = [Filter._filter_item(item, keywords) for item in value]
|
|
31
|
+
elif isinstance(value, dict):
|
|
32
|
+
filtered[key] = Filter._filter_dict_keys(value, keywords)
|
|
33
|
+
else:
|
|
34
|
+
filtered[key] = value
|
|
35
|
+
return filtered
|
|
36
|
+
|
|
37
|
+
if isinstance(data, list):
|
|
38
|
+
return [Filter._filter_item(item, keywords) for item in data]
|
|
39
|
+
|
|
40
|
+
return data
|
|
41
|
+
|
|
42
|
+
@staticmethod
|
|
43
|
+
def _filter_item(item, keywords):
|
|
44
|
+
if isinstance(item, dict):
|
|
45
|
+
return Filter._filter_dict_keys(item, keywords)
|
|
46
|
+
if isinstance(item, list):
|
|
47
|
+
return [Filter._filter_item(sub_item, keywords) for sub_item in item]
|
|
48
|
+
return item
|
|
49
|
+
|
|
50
|
+
@staticmethod
|
|
51
|
+
def _filter_dict_keys(data, keywords):
|
|
52
|
+
filtered = {}
|
|
53
|
+
for key, value in data.items():
|
|
54
|
+
if Filter._key_matches(key, keywords):
|
|
55
|
+
filtered[key] = value
|
|
56
|
+
return filtered
|
|
57
|
+
|
|
58
|
+
@staticmethod
|
|
59
|
+
def _key_matches(key, keywords):
|
|
60
|
+
key_lower = str(key).lower()
|
|
61
|
+
return any(keyword == key_lower for keyword in keywords)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: strava-cz-api
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4
|
|
4
4
|
Summary: Rest API for strava.cz.
|
|
5
5
|
Author-email: Matěj Adamec <kralyk@kralyk.dev>
|
|
6
6
|
Requires-Python: >=3.8
|
|
@@ -73,6 +73,16 @@ api = Api(
|
|
|
73
73
|
| `postOrders()` | Uložit změny objednávek | Nutné po `postJidlo`/`postDen` |
|
|
74
74
|
| `resetChanges()` | Resetuje neuložené změny v komunikaci. | Dobré pro zrušení změn pří objednávkách
|
|
75
75
|
|
|
76
|
+
## Filtr
|
|
77
|
+
Filtr existuje, ale je to **pre‑release**: může obsahovat chyby a bude se dál rozšiřovat. Lze ho importovat (`from strava_cz_api import Filter`), ale zatím není zaručeno, že všude funguje správně.
|
|
78
|
+
|
|
79
|
+
```py
|
|
80
|
+
from strava_cz_api import Filter
|
|
81
|
+
|
|
82
|
+
filtrovano = Filter.filter_json(["veta"], api.getJidelnicekAll())
|
|
83
|
+
print(filtrovano)
|
|
84
|
+
```
|
|
85
|
+
|
|
76
86
|
## Objednávky – správný postup
|
|
77
87
|
Změny objednávek se ukládají ve dvou krocích:
|
|
78
88
|
1. Provedení změn (`postJidlo` nebo `postDen`)
|
|
@@ -94,6 +104,62 @@ Většina metod vrací JSON string. Metody `postJidlo`, `postDen` a `postOrders`
|
|
|
94
104
|
## Příklady
|
|
95
105
|
Ukázkové skripty najdeš ve složce `./examples`.
|
|
96
106
|
|
|
107
|
+
## Json struktura
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"tableX": [
|
|
111
|
+
{
|
|
112
|
+
"id": 0,
|
|
113
|
+
"datum": "30.06.2026", // datum
|
|
114
|
+
"druh_popis": "Polévka", // část
|
|
115
|
+
"druh_chod": "Oběd", // chod
|
|
116
|
+
"nazev": "Polévka 1", // název chodu (oběd č. 1)
|
|
117
|
+
"popis": "Snídaně", // popis chodu
|
|
118
|
+
"delsiPopis": "", // delší popis chodu
|
|
119
|
+
"zakazaneAlergeny": null, // ??
|
|
120
|
+
"alergeny_text": "", // alergeny
|
|
121
|
+
"alergeny": [], // alergeny
|
|
122
|
+
"chod": "C", // číslo chodu (A = snídaně, B, C)
|
|
123
|
+
"druh": "OB", // druh chodu ve zkratce
|
|
124
|
+
"cena": "45.00", // cena
|
|
125
|
+
"polevka": "N", // zda pole je polévka (je v ceně)
|
|
126
|
+
"pocet": 1, // 1 = přihlášeno, 0 = odhlášeno
|
|
127
|
+
"veta": "172", // id políčka
|
|
128
|
+
"vetaDieta": "196", // ??
|
|
129
|
+
"omezeniObj": { // ???
|
|
130
|
+
"den": "",
|
|
131
|
+
"obj": "",
|
|
132
|
+
"zm": "",
|
|
133
|
+
"bur": "C"
|
|
134
|
+
},
|
|
135
|
+
"burza": { // ???
|
|
136
|
+
"zmena": "0",
|
|
137
|
+
"ostatni": "0",
|
|
138
|
+
"nabidka": "0",
|
|
139
|
+
"poptavka": "0"
|
|
140
|
+
},
|
|
141
|
+
"vydejniMisto": { // kde se vydává oběd (škola má více jídelních budov)
|
|
142
|
+
"misto": "2",
|
|
143
|
+
"mista": "2"
|
|
144
|
+
},
|
|
145
|
+
"diety": { // ??
|
|
146
|
+
"dieta": "",
|
|
147
|
+
"diety": ""
|
|
148
|
+
},
|
|
149
|
+
"zkratkaProduktu": "OB", // zkratka produktu (identické jako chod, u polévky chybí??)
|
|
150
|
+
"cisloJidelnicku": "1", // ??
|
|
151
|
+
"multipleNazev": "1NOběd č. 1COB", // ??
|
|
152
|
+
"version": 5, // ??
|
|
153
|
+
"casKonec": "2026-06-29T11:50:00", // do kdy lze přihlásit
|
|
154
|
+
"casOdhlaseni": "2026-06-29T11:50:00", // do kdy lze přihlásit
|
|
155
|
+
"obrazky": []
|
|
156
|
+
},
|
|
157
|
+
...
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
- Mnoho polí není vyplněno. Zda víte co to je, doplňte to nebo mě kontaktujte.
|
|
162
|
+
|
|
97
163
|
## Demo
|
|
98
164
|
- Demo uživatele si lze vytvořit na https://www.strava.cz/strava/Stravnik/Demo
|
|
99
165
|
- Poté se lze přihlásit na https://app.strava.cz/ na jídelně `0000`
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|