├── LICENSE └── README.md /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 2-Clause License 2 | 3 | Copyright (c) 2019, Boapps 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 20 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | **Ez már nem aktuális, frissebb változat:** https://github.com/bczsalba/ekreta-docs-v2 2 | 3 | # e-Kréta API dokumentáció 4 | 5 | *Krétás API-knak nem hivatalos gyűjteménye* 6 | 7 | Ezen lekérdezések nagy részét egy [SSL Capture](https://play.google.com/store/apps/details?id=com.minhui.networkcapture) nevű Androidos alkalmazással szereztem. 8 | 9 | A webes KRÉTA API dokumentációját [itt találod](https://github.com/Xerren09/eKreta-WebAPI-documentation). ([Xerren09](https://github.com/Xerren09) készítette) 10 | 11 | ## Más, nem hivatalos Krétás projektek: 12 | * [Arisztokréta](https://play.google.com/store/apps/details?id=hu.coware.ellenorzo) Nem hivatalos kliensapp a kréta rendszert használó diákoknak. 13 | * [Napló+](https://play.google.com/store/apps/details?id=hu.coware.naplo) Tanári app a krétához. 14 | * [Spongyarend](http://www.sceurpien.com/spongyarend/) Ingyenes órarend generátor alkalmazás a KRÉTA rendszer állományaiból 15 | * [eFilc](https://github.com/bru02/eFilc) Webes Kréta kliens diákoknak, Toldys extrákkal ([weboldal](https://www.bru02.tk/e-filc/)) 16 | * [KFGnaplo](https://github.com/hexadec/KFGnaplo) Android kliens a Krétához, ami értesítéseket küld az új jegyekről, helyettesítésekről (még csak a Karinthy Frigyes Gimnáziumhoz van) 17 | * [Szivacs Naplo](https://github.com/boapps/Szivacs-Naplo) Android kliens a Kréta rendszerhez 18 | * [Kréti](https://github.com/szilardhuber/kreta-bot) Bot, ami Krétás értesítéseket küld egy chatbe 19 | * [kfgApp](https://github.com/baltitenger/KFGapp) Egy app a Karinthy Gimnáziumhoz, Kréta API-t is használ 20 | * [CardPass](https://github.com/Xerren09/CardPass-Entry) Beléptetőkártyás rendszer, ami a Kréta rendszert használja, hogy eldöntse késett -e a tanuló 21 | * [eKreta@thegergo02](https://github.com/thegergo02/eKreta-thegergo02) Cinnamon asztali környezethez egy desklet, megjeleníti a jegyeidet és a Kréta API-t használja 22 | * [gKréta](https://github.com/thegergo02/gKreta) Az [Electron](https://electronjs.org/) frameworkon alapuló kliens a KRÉTA rendszerhez. 23 | * [eSzivacs-PC](https://github.com/pepyta/eSzivacs-PC) [Electron](https://electronjs.org/)on alapuló PC-s kliens. 24 | * [e-kreta-cli](https://github.com/szekelymilan/e-kreta-cli) Egy asztali, konzolos (terminál) kliens a Krétához. 25 | * [zsírkréta](https://github.com/forcemagic/zsirkreta) Egy Androidos kliens a Krétához 26 | * [e-Vonalzó](https://github.com/danielszenasi/eVonalzo) Még egy webes Kréta kliens [weboldal](https://evonalzo.netlify.com/sign-in) [graphql api](https://evonalzo.netlify.com/.netlify/functions/kreta) 27 | * [gokreta](https://github.com/thegergo02/gokreta) Go implementációja a Kréta API-nak. 28 | * [K Napló](https://github.com/Gbr22/knaplo) Nem hivatalos Kréta webapp. https://naplo.gbr22.me/ 29 | * [CursedKreta](https://github.com/thegergo02/cursedkreta) Konzolos (terminál) kliens a Krétához, go-ban. 30 | 31 | 32 | ## Figyelem! Ismert problémák az API-val: 33 | 34 | **A KRÉTA API-ja nem követi az HTTP standardot:** 35 | 36 | Ez azért nem célszerű, mert így egyes nyelvekekben (pl.: Swift, Dart), amikben nem lehet kisbetűs Headert beállítani, mert bizonyos lekérdezések (iskolák listája) nem lehetségesek a KRÉTA hivatalos API-jából. 37 | Többek között emiatt (és a nem kikapcsolható reklámok miatt) azt a megoldást találtuk ki, hogy az iskolák listáját oránként frissítjuk és [saját szerveren](https://e-szivacs.org) hosztoljuk. 38 | 39 | **Nem célszerű használat és a *apiKey/client_id*:** 40 | Megkeresésünkre a Krétások azt írták e-mailbe, hogy visszafejtésből megszerzett kulcsokat nem lenne szabad használni, ami szerintünk azért sem helyes, mert vagy a lekérésekhez mindenki ugyanazt a kulcsot használja, vagy a kulcsot nem csak visszafejtésből lehet megszerezni, hanem konkrétan midnen bejelentkezéskor a KRÉTA által kiadott token tartalmazza a *client_id*-nek hívott kulcsot. 41 | 42 | **Kötelező header** 43 | 44 | Jelenlegi tudásunk szerint a KRÉTA blokkolja azokat a lekérdezéseket, amelyek *User-Agent*-je egyezik a "szivacs_naplo" szöveggel, akár nagybetűvel, akár kisbetűvel. Ez a blokkolás viszont (még) nem az összes Krétás szerverre vonatkozik, csak a "2-kaffee" nevű, leggyakrabban a "klik"-el kezdődű intézménykódú iskolák által használt szeverrel. Magyarul kb. 80%-a az iskolálnak Szivacs Naplóval blokkolva van. 45 | **Mindezek ellenéré tudtunkal még nincsen kötelező header.** 46 | 47 | 48 | ## Iskolák lekérdezése 49 | #### Az összes iskola ahol be van vezetve az e-Kréta: 50 | ```bash 51 | curl -H "apiKey: 7856d350-1fda-45f5-822d-e1a2f3f1acf0" https://kretaglobalmobileapi.ekreta.hu/api/v1/Institute 52 | ``` 53 | * apiKey: kötelező bizonyos lekérdezésekhez, mindenkinek ugyanaz: 54 | * `7856d350-1fda-45f5-822d-e1a2f3f1acf0` (a Krétások szerint ez a kulcs nem nyilvános, annak ellenéré, hogy mindenki ezt használja) 55 | 56 | #### A szerver válasza: 57 | ```json 58 | [ 59 | { 60 | "InstituteId": 3928, 61 | "InstituteCode": "appteszt", 62 | "Name": "PedApp Teszt Intézmény", 63 | "Url": "https://appteszt.ekreta.hu", 64 | "City": "Budapest", 65 | "AdvertisingUrl": "", 66 | "FeatureToggleSet": { 67 | "JustificationFeatureEnabled": "false" 68 | } 69 | }, 70 | ... 71 | ] 72 | ``` 73 | #### Egy iskola adatainak lekérése ID alapján: 74 | ```bash 75 | curl -H "apiKey: 7856d350-1fda-45f5-822d-e1a2f3f1acf0" https://kretaglobalmobileapi.ekreta.hu/api/v1/Institute/3928 76 | ``` 77 | 78 | #### A szerver válasza: 79 | ```json 80 | { 81 | "InstituteId": 3928, 82 | "InstituteCode": "appteszt", 83 | "Name": "PedApp Teszt Intézmény", 84 | "Url": "https://appteszt.ekreta.hu", 85 | "City": "Budapest", 86 | "AdvertisingUrl": "", 87 | "FeatureToggleSet": { 88 | "JustificationFeatureEnabled": "false" 89 | } 90 | } 91 | ``` 92 | ## API linkek lekérdezése 93 | #### Lekéri a KRÉTA API linkjét: 94 | ```bash 95 | curl http://kretamobile.blob.core.windows.net/configuration/ConfigurationDescriptor.json 96 | ``` 97 | * igazából egy mezei böngészőből is [végrehajtható](http://kretamobile.blob.core.windows.net/configuration/ConfigurationDescriptor.json) 98 | * mire jó: ha az API linkje változna, akkor nem kell frissíteni az appot (rájött: [thegergo02](https://github.com/thegergo02)) 99 | 100 | #### A szerver válasza: 101 | ```json 102 | { 103 | "GlobalMobileApiUrlDEV": "https://kretaglobalmobileapiuat.ekreta.hu", 104 | "GlobalMobileApiUrlTEST": "https://kretaglobalmobileapitest.ekreta.hu", 105 | "GlobalMobileApiUrlUAT": "https://kretaglobalmobileapiuat.ekreta.hu", 106 | "GlobalMobileApiUrlPROD": "https://kretaglobalmobileapi.ekreta.hu" 107 | } 108 | ``` 109 | 110 | ## Bejelentkezés 111 | ### Lekér egy Bearer kódot amit majd azonosításra fogunk használni később 112 | 113 | ```bash 114 | curl --data "institute_code=xxxxxxxxxxx&userName=xxxxxxxxxxx&password=xxxxxxxxxxx&grant_type=password&client_id=919e0c1c-76a2-4646-a2fb-7085bbbf3c56" https://xxxxxxxxxxx.e-kreta.hu/idp/api/v1/Token -H "Content-Type: application/x-www-form-urlencoded; charset=utf-8" 115 | ``` 116 | 117 | * institute_code: az intézmény azonosítója 118 | * userName: a felhasználó azonosítója 119 | * password: a felhasználó jelszava 120 | * grant_type: Az OAuth 2 kötelező paramétere, elvileg lehet: 121 | * Authorization Code 122 | * Implicit 123 | * **Password** `grant_type=password` 124 | * Client Credentials 125 | * Device Code 126 | * **Refresh Token** `grant_type=refresh_token` 127 | Amikor Password-el lekérjük az access_token-t akkor egy refresh_token-t is kapunk, amivel később a jelszó nélkül is frissíthetjük az access_token-ünket. 128 | * client_id: ` 919e0c1c-76a2-4646-a2fb-7085bbbf3c56` 129 | 130 | ### A Bearer token-ról: 131 | A Bearer tokent a mobil kliensek használják, elméletileg a diákhoz hasonlóan a tanári résznek is hasonlóan kéne működnie. 132 | **ÚJ!** : Igazából a Bearer token egy Base64-es string, amiben csomó más adat is el van rejtve. Ezeket egy művelettel elő lehet varázsolni. 133 | ``` c# 134 | // a telefonos kliens valahogy így csinálja: 135 | // fontos: a base64-elt json mögött van még hmac 136 | private static string decodeToken(string str) { 137 | switch (str.Length % 4) { 138 | case 2: 139 | str += "=="; 140 | break; 141 | case 3: 142 | str += "="; 143 | break; 144 | } 145 | return Convert.FromBase64String(str); 146 | ``` 147 | És ezt kapjuk: 148 | ``` json 149 | { 150 | "alg": "http://www.w3.org/2001/04/xmldsig-more#hmac-sha256", 151 | "typ": "JWT" 152 | } { 153 | "idp:user_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX", 154 | "kreta:institute_code": "XXXXXXXX", 155 | "kreta:institute_user_id": "00000", 156 | "kreta:tutelary_id": "", 157 | "kreta:school_year_id": "00", 158 | "role": "Student", 159 | "exp": 00000, 160 | "iss": "kreta.identityprovider", 161 | "aud": "919e0c1c-76a2-4646-a2fb-7085bbbf3c56" 162 | } 163 | ``` 164 | Ahol az *"aud"* egyezik a client_id-vel. Érdekes, nem csak visszafejtéssel lehet megkapni, hanem közvetlen a Kréta mondja meg. :O 165 | 166 | 167 | #### A szerver válasza: 168 | ```json 169 | { 170 | "access_token":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 171 | "refresh_token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 172 | ... 173 | } 174 | ``` 175 | 176 | ### `access_token` frissítése 177 | ```bash 178 | curl --data "institute_code=xxxxxxxxxxx&refresh_token=xxxxxxxxxxx&grant_type=refresh_token&client_id=919e0c1c-76a2-4646-a2fb-7085bbbf3c56" https://xxxxxxxxxxx.e-kreta.hu/idp/api/v1/Token -H "Content-Type: application/x-www-form-urlencoded; charset=utf-8" 179 | ``` 180 | * ugyanúgy működik, mint a Bearer kód lekérdezése 181 | * itt is kapunk egy refresh_token-t amit újra fel tudunk használni a következő frissítéshez 182 | 183 | ## E-ügyintézéses üzenetek lekérése 184 | 185 | * a mobil alkalmazás használja 186 | * kell hozzá a Bearer azonosító (lásd: bejelentkezés) 187 | 188 | ```bash 189 | curl https://eugyintezes.e-kreta.hu/integration-kretamobile-api/v1/kommunikacio/postaladaelemek/sajat -H "Authorization: Bearer XXXXXXXXXXXXXXX" 190 | ``` 191 | 192 | * Ha nincs még üzeneted, akkor egy 500-as hibakóddal egy `An error has occured!` üzenetet kapsz, ez itt "normális" 193 | 194 | #### A szerver válasza: 195 | ```json 196 | [ 197 | { 198 | "azonosito": 0000, 199 | "isElolvasva": false, 200 | "isToroltElem": false, 201 | "tipus": { 202 | "azonosito": 1, 203 | "kod": "BEERKEZETT", 204 | "rovidNev": "Be\u00e9rkezett \u00fczenet", 205 | "nev": "Be\u00e9rkezett \u00fczenet", 206 | "leiras": "Be\u00e9rkezett \u00fczenet" 207 | }, 208 | "uzenet": { 209 | "azonosito": 00000, 210 | "kuldesDatum": "0000-00-00T00:00:00", 211 | "feladoNev": "XXXXX XXXXXX", 212 | "feladoTitulus": "tan\u00e1r", 213 | "szoveg": "xxxxx", 214 | "targy": "xxxxxxxxx", 215 | "cimzettLista": [ 216 | { 217 | "azonosito": 0000000, 218 | "kretaAzonosito": 0000000, 219 | "nev": "XXXXXX", 220 | "tipus": { 221 | "azonosito": 4, 222 | "kod": "OSZTALY_TANULO", 223 | "rovidNev": "Oszt\u00e1ly - Tanul\u00f3", 224 | "nev": "Oszt\u00e1ly - Tanul\u00f3", 225 | "leiras": "Oszt\u00e1ly - Tanul\u00f3" 226 | } 227 | } 228 | ... 229 | ], 230 | "csatolmanyok": [ 231 | { 232 | "azonosito": 000000, 233 | "fajlNev": "xxxxxxx.xxx" 234 | } 235 | ... 236 | ] 237 | } 238 | }, 239 | ... 240 | ] 241 | 242 | ``` 243 | * Az "uzenet" nek a "szoveg"-e maximum 100 karakter hosszú lehet, ha a teljes szöveget akarjuk, akkor egy másik lekérdezés kell: 244 | 245 | ```bash 246 | curl https://eugyintezes.e-kreta.hu/integration-kretamobile-api/v1/kommunikacio/postaladaelemek/0000 -H "Authorization: Bearer XXXXXXXXXXXXXXX" 247 | ``` 248 | 249 | * itt a 0000 a legkülső "azonosito"-t jelöli 250 | 251 | A szerver válasza: 252 | 253 | ```json 254 | { 255 | "azonosito": 0000, 256 | "isElolvasva": true, 257 | "isToroltElem": false, 258 | "tipus": { 259 | "azonosito": 1, 260 | "kod": "BEERKEZETT", 261 | "rovidNev": "Be\u00e9rkezett \u00fczenet", 262 | "nev": "Be\u00e9rkezett \u00fczenet", 263 | "leiras": "Be\u00e9rkezett \u00fczenet" 264 | }, 265 | "uzenet": { 266 | "azonosito": 00000, 267 | "kuldesDatum": "0000-00-00T00:00:00", 268 | "feladoNev": "XXXXX XXXXXX", 269 | "feladoTitulus": "tan\u00e1r", 270 | "szoveg": "xxxxx", 271 | "targy": "xxxxxxxxx", 272 | "cimzettLista": [ 273 | { 274 | "azonosito": 0000000, 275 | "kretaAzonosito": 0000000, 276 | "nev": "XXXXXX", 277 | "tipus": { 278 | "azonosito": 4, 279 | "kod": "OSZTALY_TANULO", 280 | "rovidNev": "Oszt\u00e1ly - Tanul\u00f3", 281 | "nev": "Oszt\u00e1ly - Tanul\u00f3", 282 | "leiras": "Oszt\u00e1ly - Tanul\u00f3" 283 | } 284 | } 285 | ... 286 | ], 287 | "csatolmanyok": [ 288 | { 289 | "azonosito": 000000, 290 | "fajlNev": "xxxxxxx.xxx" 291 | } 292 | ... 293 | ] 294 | } 295 | } 296 | ``` 297 | 298 | ## E-ügyintézéses üzenetek olvasottnak jelölése 299 | * ettől az "isElolvasva" true lesz 300 | 301 | ```bash 302 | curl https://eugyintezes.e-kreta.hu//integration-kretamobile-api/v1/kommunikacio/uzenetek/olvasott -H "Authorization: Bearer XXXXXXXXXXXXXXX" --data "{"isOlvasott":true,"uzenetAzonositoLista":[0000]}" 303 | ``` 304 | 305 | ## Bejelentett számonkérések lekérése 306 | 307 | ```bash 308 | curl https://xxxxxxxxxx.e-kreta.hu/mapi/api/v1/BejelentettSzamonkeres?DatumTol=null&DatumIg=null -H "Authorization: Bearer XXXXXXXXXXXXXXX" 309 | ``` 310 | 311 | A szerver válasza: 312 | 313 | ```json 314 | [ 315 | { 316 | "Uid": "0000", 317 | "Id": 0000, 318 | "Datum": "0000-00-00T00:00:00Z", 319 | "HetNapja": "Kedd", 320 | "Oraszam": 0, 321 | "Tantargy": "kémia", 322 | "Tanar": "Xxxxxx Xxxxxx", 323 | "SzamonkeresMegnevezese": "xxxxxxxxx", 324 | "SzamonkeresModja": "Írásbeli röpdolgozat", 325 | "BejelentesDatuma": "0000-00-00T00:00:00Z" 326 | } 327 | ... 328 | ] 329 | ``` 330 | 331 | * Uid: az id csak stringként (pl.: 2 -> "2") 332 | * Hogy miért kell itt (és sehol máshol) a dátumon kívül egy HetNapja is, fogalmam sincs! 333 | * az óraszámm (szerintem) azt mutatja, hogy hányadik órában lesz a dolgozat 334 | 335 | ## Felhasználó adatainak lekérdezése 336 | ### Jegyek, hiányzások, faliújság, szülő és osztályfőnök adatainak lekérdezése 337 | 338 | * a mobil alkalmazás használja 339 | * kell hozzá a Bearer azonosító (lásd: bejelentkezés) 340 | 341 | ```bash 342 | curl -H "Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" https://xxxxxxxxxxx.e-kreta.hu/mapi/api/v1/Student?fromDate=xx-xx-xx&toDate=xx-xx-xx 343 | ``` 344 | 345 | * fromDate: ettől a dátumtól kezdődően mutasson jegyeket, hiányzást és feljegyzést (a "Date" legyen nagyobb vagy egyenlő ennél) 346 | * toDate: eddig a dátumig bezárólag mutasson jegyeket, hiányzást és feljegyzést (a "Date" legyen kissebb vagy egyenlő ennél) 347 | 348 | Ha nem szeretnénk dátumhoz kötni, lehet az xx-xx-xx helyére null-t is írni vagy az egészet le lehet hagyni. 349 | 350 | ```bash 351 | curl -H "Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" https://xxxxxxxxxxx.e-kreta.hu/mapi/api/v1/Student?fromDate=null&toDate=null 352 | ``` 353 | ```bash 354 | curl -H "Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" https://xxxxxxxxxxx.e-kreta.hu/mapi/api/v1/Student 355 | ``` 356 | 357 | #### A szerver válasza: 358 | ```json 359 | { 360 | "StudentId": 0000000, 361 | "SchoolYearId": 0000000, 362 | "Name": "Xxxxx Xxxxx", 363 | "NameOfBirth": "Xxxxx Xxxxx", 364 | "PlaceOfBirth": "Xxxxx Xxxxx", 365 | "MothersName": "Xxxxx Xxxxx", 366 | "AddressDataList": [ 367 | "Xxxxx Xxxxx, Xxxxx Xxxxx xxxx " 368 | ], 369 | "DateOfBirthUtc": "0000-00-00T22:00:00Z", 370 | "InstituteName": "Xxxxx Xxxxx Xxxxx Xxxxx Xxxxx Xxxxx", 371 | "InstituteCode": "xxxxxxxxxxx", 372 | "Evaluations": [ 373 | { 374 | "EvaluationId": 12345678, 375 | "Form": "Mark", 376 | "FormName": "Elégtelen (1) és Jeles (5) között az öt alapértelmezett érték", 377 | "Type": "MidYear", 378 | "TypeName": "Évközi jegy/értékelés", 379 | "Subject": "Xxxxxxxx", 380 | "SubjectCategory": null, 381 | "SubjectCategoryName": "Xxxxxxxx", 382 | "Theme": "xxxxxxx", 383 | "IsAtlagbaBeleszamit": true, 384 | "Mode": "Gyakorlati feladat", 385 | "Weight": "100%", 386 | "Value": "Jeles(5)", 387 | "NumberValue": 5, 388 | "SeenByTutelaryUTC": null, 389 | "Teacher": "Xxxxxxxx Xxxxxxxx", 390 | "Date": "2019-06-07T00:00:00", 391 | "CreatingTime": "2019-06-07T08:00:00.000", 392 | "Jelleg": { 393 | "Id": 1, 394 | "Nev": "Ertekeles", 395 | "Leiras": "Értékelés" 396 | }, 397 | "JellegNev": "Ertekeles", 398 | "ErtekFajta": { 399 | "Id": 1, 400 | "Nev": "Osztalyzat", 401 | "Leiras": "Osztályzat" 402 | } 403 | }, 404 | ... 405 | ], 406 | "SubjectAverages": [ 407 | { 408 | "Subject": "Xxxxxxxx", 409 | "SubjectCategory": null, 410 | "SubjectCategoryName": "Xxxxxxxx xx Xxxxxxxx", 411 | "Value": 0.0, 412 | "ClassValue": 0.00, 413 | "Difference": -0.00 414 | }, 415 | ... 416 | ], 417 | "Absences": [ 418 | { 419 | "AbsenceId": 0000000, 420 | "Type": "Absence", 421 | "TypeName": "Hiányzás", 422 | "Mode": "Lesson", 423 | "ModeName": "Tanórai mulasztás", 424 | "Subject": "Xxxxxx xxxxx", 425 | "SubjectCategory": null, 426 | "SubjectCategoryName": "Xxxxxxxx xx Xxxxxxxx", 427 | "DelayTimeMinutes": 0, 428 | "Teacher": "Xxxxxxxx Xxxxxxxx", 429 | "LessonStartTime": "0000-00-00T00:00:00", 430 | "NumberOfLessons": 0, 431 | "CreatingTime": "0000-00-00T00:00:00.000", 432 | "JustificationState": "BeJustified", 433 | "JustificationStateName": "Igazolandó mulasztás", 434 | "JustificationType": "UnJustified", 435 | "JustificationTypeName": "Igazolatlan", 436 | "SeenByTutelaryUTC": null 437 | }, 438 | ... 439 | ], 440 | "Notes": [ 441 | { 442 | "NoteId": 0000000, 443 | "Type": "Elektronikus üzenet", 444 | "Title": "Xxxxxxxx", 445 | "Content": "Xxxxxx xxxxxx x xxxxxx xxxxxx xxx xxxxxx.", 446 | "SeenByTutelaryUTC": null, 447 | "Teacher": "Xxxxxx Xxxxxx", 448 | "Date": "0000-00-00T00:00:00", 449 | "CreatingTime": "0000-00-00T00:00:00.000" 450 | }, 451 | ... 452 | ], 453 | "Lessons": null, 454 | "Events": null, 455 | "FormTeacher": { 456 | "TeacherId": 0000000, 457 | "Name": "Xxxxxxx Xxxxxxx", 458 | "Email": null, 459 | "PhoneNumber": null 460 | }, 461 | "Tutelaries": [ 462 | { 463 | "TutelaryId": 0000, 464 | "Name": "Xxxxxx Xxxxxxx", 465 | "Email": "", 466 | "PhoneNumber": "000000000" 467 | } 468 | ] 469 | } 470 | ``` 471 | #### Jegyek: 472 | * Type: lehet "HalfYear": félévi; "MidYear": évközi; "EndYear": év végi 473 | * Form: lehet "Mark": sima jegy; "Text": szöveges értékelés 474 | * Fejlesztőknek figyelem: az `EvaluationId`-t NEM SZABAD egyedi azonosítóként kezelni, az összetartozó (de nyilván különböző) magatartás és szorgalom jegyek ugyanazt az "id"-t kapják. Tehát két jegy néha ugyanazt az id-t kapja. Megoldás lehet az `EvaluationId` végére illeszteni (concatenatelni stringként) a `Jelleg`-nek az `Id`-jét. 475 | 476 | ## Bejelentett számonkérések lekérdezése 477 | ### Lekéri a tanárok által bejelentett dolgozatokat 478 | * a mobil alkalmazás használja 479 | * kell hozzá a Bearer azonosító (lásd: bejelentkezés) 480 | 481 | ```bash 482 | curl -H "Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" https://xxxxxxxxxxx.e-kreta.hu/mapi/api/v1/BejelentettSzamonkeres 483 | ``` 484 | 485 | #### A szerver válasza nekem: semmi, mert nálunk egy tanár sem használja nálunk ezt a funkciót 486 | 487 | ## Órarend lekérése 488 | ### Lekéri két adott időpont között megtartott (vagy elmaradt) tanórákat 489 | 490 | * a mobil alkalmazás használja 491 | * kell hozzá a Bearer azonosító (lásd: bejelentkezés) 492 | * fromDate: a vizsgált időintervallum kezdete (ÉÉÉÉ-HH-NN) 493 | * toDate: a vizsgált időintervallum vége (ÉÉÉÉ-HH-NN) 494 | 495 | ```bash 496 | curl -H "Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" https://xxxxxxxxxxx.e-kreta.hu/mapi/api/v1/Lesson?fromDate=2018-09-03&toDate=2018-09-09 497 | ``` 498 | 499 | #### A szerver válasza: 500 | ```json 501 | [ 502 | { 503 | "LessonId": 0000000, 504 | "CalendarOraType": "TanitasiOra", 505 | "Count": 1, 506 | "Date": "0000-00-00T00:00:00", 507 | "StartTime": "0000-00-00T00:00:00", 508 | "EndTime": "0000-00-00T00:00:00", 509 | "Subject": "XXXXXXXXXXX", 510 | "SubjectCategory": null, 511 | "SubjectCategoryName": "XXXXXXXX", 512 | "ClassRoom": "XXXXX", 513 | "ClassGroup": "00.x", 514 | "Teacher": "Xxxxxxx Xxxxx", 515 | "DeputyTeacher": "", 516 | "State": "Registered", 517 | "StateName": "Naplózott tanóra", 518 | "PresenceType": "Present", 519 | "PresenceTypeName": "A tanuló részt vett a tanórán", 520 | "TeacherHomeworkId": null, 521 | "IsTanuloHaziFeladatEnabled": true, 522 | "Theme": "Xxxxxxx", 523 | "Homework": null 524 | }, 525 | ... 526 | ] 527 | ``` 528 | ## Token frissítés 529 | ### Lekér egy új Bearer kódot amit majd azonosításra fogunk használni később 530 | 531 | ```bash 532 | curl --data "refresh_token=XXXXXXXXXXX&grant_type=refresh_token&client_id=919e0c1c-76a2-4646-a2fb-7085bbbf3c56" https://xxxxxxxxxxx.e-kreta.hu/idp/api/v1/Token 533 | ``` 534 | * a mobil alkalmazás használja 535 | * refresh_token: A refresh_token amit kaptál amikor beléptél 536 | * grant_type: refresh_token 537 | * client_id: `919e0c1c-76a2-4646-a2fb-7085bbbf3c56` 538 | 539 | #### A szerver válasza: 540 | ```json 541 | { 542 | "access_token":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 543 | "refresh_token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 544 | ... 545 | } 546 | ``` 547 | 548 | ## Tanulói házi feladat lekérése 549 | 550 | * Lekéri egy tanuló által felírt házit egy ID alapján 551 | * Az ID-t csak abból az órából lehet lekérni, amiben felírtak házit, tehát végig kell vizsgálni az összes órát például 1 héten, hogy lekérjük az aheti házikat 552 | * Ha tanár töltötte fel a házit, amihez az ID tartozik, akkor a válasz üres 553 | 554 | ```bash 555 | curl -H "Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" https://xxxxxxxxxxx.e-kreta.hu/mapi/api/v1/HaziFeladat/TanuloHaziFeladatLista/HAZIFELADATID 556 | ``` 557 | 558 | * HAZIFELADATID: egy ID, amit az órarendből kérhetünk le (TeacherHomeworkId) 559 | 560 | Válasz: 561 | 562 | ```json 563 | [ 564 | { 565 | "Uid": "0000", 566 | "Id": 0000, 567 | "TanuloNev": "Xxxxxx Xxxxxx", 568 | "FeladasDatuma": "2019-00-00T00:00:00.000", 569 | "FeladatSzovege": "XXXXXXXX", 570 | "RogzitoId": 000000, 571 | "TanuloAltalTorolt": false, 572 | "TanarAltalTorolt": false 573 | }, 574 | ... 575 | ] 576 | ``` 577 | 578 | ## Tanulói házi felírása 579 | 580 | * Tanuló fel tud írni házi feladatot, amit aztán a többi diák (és gondolom a tanár is) lát 581 | * Lehet, hogy néhány iskolában le van tiltva 582 | 583 | ```bash 584 | curl -X POST -H "Authorization:Bearer XXXXXXXXXXXXXXXXX" -H "Content-Type:application/json; charset=utf-8" -H "Host:klik00000000.e-kreta.hu" -d '{"OraId":"00000000","OraDate":"0000. 00. 00. 00:00:00","OraType":"TanitasiOra","HataridoUtc":"0000. 00. 00. 22:00:00","FeladatSzovege":"XXXXXXXX"}' "https://klik0000000.e-kreta.hu/mapi/api/v1/HaziFeladat/CreateTanuloHaziFeladat" 585 | ``` 586 | 587 | Válasz: 588 | ```json 589 | { 590 | "TanarHaziFeladatId": 00000, 591 | "HozzaadottTanuloHaziFeladatId": 0000, 592 | "HozzaadottTanuloHaziBejelentesDatuma": "0000-00-00T00:00:00.00000+00:00" 593 | } 594 | ``` 595 | 596 | * Azt nem értem, hogy miért "TanarHaziFeladatId"-nek hívják, amikor a tanuló teszi fel, de itt vannak ilyen furcsaságok 597 | 598 | ## Házi törlése 599 | 600 | * igazából nem törli a házit a rendszerből, csak átírja a "TanuloAltalTorolt" értékét true-ra, ezt a hivatalos kréta azzal jelöli, hogy áthúzza a szöveget 601 | 602 | ```bash 603 | curl -X DELETE -H "Authorization:Bearer XXXXXXXXXXXXXXXXX" -H "Content-Type:application/json; charset=utf-8" -H "Host:klik00000000.e-kreta.hu" -d '{"id":"000"}' "https://klik0000000.e-kreta.hu/mapi/api/v1/HaziFeladat/DeleteTanuloHaziFeladat/000" 604 | ``` 605 | --------------------------------------------------------------------------------