Skip to content
This repository has been archived by the owner on May 13, 2019. It is now read-only.

Open API? #49

Open
miketth opened this issue Sep 2, 2018 · 15 comments
Open

Open API? #49

miketth opened this issue Sep 2, 2018 · 15 comments
Labels

Comments

@miketth
Copy link

miketth commented Sep 2, 2018

Hi,

Építeni tervezek egy appot, amit az osztályban egy tabletre kirakva láthatjuk a következő órákat, elmaradó órákat, stb és ehhez kerestem a Kréta-hoz API-t vagy ilyesmit. Lehet hogy csak idióta vagyok, de nem találtam semmi hivatalosat, viszont az appod elég szépen van írva és gondoltam onnan kinézem.
De ahogy nézem saját backend API-t írtál a Kréta és az app közé. 2 kis kérdés:

  1. Használhatom-e ezt a backendet a saját appommal (ezzel a szerverednek egy minimális forgalmat okoznék)?
  2. Vagy esetleg open-source-olni tudnád ezt az API-t, hogy hostoljak egy sajátot?

Mindenesetre köszi az app-ért, kommentek nélkül is elég érthető a kód. 👍

@forcemagic
Copy link
Owner

forcemagic commented Sep 2, 2018

@PhotonMike Üdv, elöször is jó látni hogy mások is érdekeltek a projektben, másodszor sajnos az API kódja se nem áttekinthetö, se nem stabil, meg némi trükközéssel megy csak úgyhogy inkább nem raknám ki open sourceba :P de ha szeretnéd, nyugodtan használhatod az enyémet, csak piszok lassú (a timeoutot told fel legalább 1 percre xD), de van neki egy wiki oldala, ahol leírtam mi hogyan megy 😄 Sok sikert az appodhoz!

Ui: A saját API használatát sajnos ki kell majd vennem az új zsírkrétából (ha egyáltalán ráérek azt megcsinálni xP) mert nem tudom bizonyítani, hogy semmit nem csinálok a jelszavakkal amik a szerveremre jönnek.

Ui2: Az mondjuk egész jó hogy az API-t még tavaly csináltam de még mindig müködik :P

@miketth
Copy link
Author

miketth commented Sep 2, 2018

Köszi a gyors választ!
Esetleg el tudsz indítani valamilyen irányba, hogy a rendes Kréta adatait hogyan lehet elérni? (vagyis honnan szedi az adatokat az API-od?)

@forcemagic
Copy link
Owner

forcemagic commented Sep 2, 2018

@PhotonMike Két mód van erre:

  1. Az "offisöl" Kréta appot egy proxyra kötni és megnézni hogy mit csinál (na én nem ezt csináltam :P)
    EDIT: Hogy miért nem? Mert van egy headerjük, amit szó szerint sikerült így elnevezni: apiKey A nagybetü-kisbetü igenis számit, mert miért ne. Na ezt az okhttp és az axios sem tolerálta túlzottan.
  2. A webes felületen megnézni, hogy mit csinál Kréta barátunk

A másodikat használja a mostani API.

Példa az utóbbira (átlagok):

https://valami.ekreta.hu/api/OsztalyzatokApi/GetOsztalyzatokOsztalyatlagokGrid?sort=&page=1&pageSize=100&group=&filter=&data=

Persze ehhez kellenek a bejelentkezés után kapott finom sütik.

Ui: Itt egy gist, ez az átlagok éles verziója most.

@miketth
Copy link
Author

miketth commented Sep 2, 2018

Hát, ez nehezebb lesz, mint gondoltam. 😅
Köszi a segítséget!

@forcemagic
Copy link
Owner

Nincs mit :) Ha van még kérdésed nyugodtan tedd fel itt, én megpróbálok rá válaszolni, illetve arra figyelj, hogy van CSRF tokenjük amit ki kell halászni a htmlből.

@miketth
Copy link
Author

miketth commented Sep 2, 2018

Hi
Szóval, elkezdtem írni az appot és eddig eljutottam addig, hogy a fiókomba be tudok jelentkezni, elkapom a 4 db szükséges sütit és le tudom kérni a hátralévő időt. Viszont az órarenddel akadályba ütköztem: hiába küldöm el a sütiket, "403 Forbiden"-t kapok csak.
Mivel viszonylag kezdő vagyok HTTP cuccokkal, nem tudom, hogy a CSRF tokent hol keressem. Meg ami fura, hogy az órarendes lekérésnél van egy _ nevű változó, ami mindig más (gondolom ez a token?), de nem találom, hogy honnan jön.
Esetleg ebben tudsz segíteni?
Mellesleg itt a source-om (Dart-ban/Flutter-ben): https://gitlab.com/MikeTTh/tabla/blob/master/lib/common.dart

@forcemagic
Copy link
Owner

forcemagic commented Sep 3, 2018

@PhotonMike A _ változó, egyébként jQuery-ből ered, és egy szimpla time() call, tehát egy idő. Annyira nem fontos, nem láttam értelmét belerakni. A CSRF tokenjük egy meta tagben van, azt hiszem __RequestVerificationToken néven. Egy külön headerben kell nekik elküldeni. Ha hazaértem suliból mutathatok példát is :)

@miketth
Copy link
Author

miketth commented Sep 3, 2018

Na ez is egy fura dolog, mert a __RequestVerificationToken az lejön mind egy süti formájában e-kreta.hu/Intezmeny/Faliujsag-ból, mind egy rejtett input boxba álcázva ugyanazon oldal HTML-jében. Eddig csak azt vettem észre, hogy a cookie-sat küldi fel a Chrome. Most vettem észre, hogy a másik egy külön headerben megy, de hogy azt hozzáadtam, még így se akar menni... 4. órám üres, majd akkor kísérletezek még... Addig is pusholtam ezt a változtatást is

@forcemagic
Copy link
Owner

Okés :)

@miketth
Copy link
Author

miketth commented Sep 3, 2018

Megvan mi a baj, de nem tudom miért történik.
A Chrome DevTools-al nézem, hogy hogyan működik a weblap, onnan az figyeltem meg, hogy:

  1. /Adminisztracio/Login POST-olja /Adminisztracio/Login/LoginCheck-nek {UserName: $username, Password: $password}-öt
  2. /Adminisztracio/Login/LoginCheck dob egy csomó sütit, ezek közül .AspNet.ApplicationCookie a leglényegesebb
  3. GET /Adminisztracio/SzerepkorValaszto -> új .AspNet.ApplicationCookie-t kapunk
  4. Ezekkel a sütikkel és a HTML-ből kinyert __RequestVerificationToken-el minden lekérés megy

Viszont nekem az appomnak SzerepkorValaszto nem ad új sütit valamiért és nem is 302 Found, hanem 200 OK a válasz...

@boapps
Copy link

boapps commented Sep 29, 2018

Sziasztok! A krétának van külön mobil API-ja amit sokkal könnyebb használni, én is írtam egy appot hozzá, bár a kód nekem se túl átlátható, azért itt van talán segíthet. Ha valamit nem értesz benne, kérdezz nyugodtan!

@forcemagic
Copy link
Owner

forcemagic commented Sep 29, 2018

Na igen, nekem az apiKey verte ki de atom módon a biztosítékot, ugyanis úgy hogy apikey nem fogadja el, pedig a http headerek mindig case insensitive kellene hogy legyenek.

Ezért csináltam inkább a scrapelős módszerrel :P

@boapps
Copy link

boapps commented Sep 29, 2018

Én végül külön Flutter plugin írtam arra 😎 (natív android lekérdezés még kezeli case sensitiven is). Először bepróbálkoztam az ügyfélszolgálatuknál, hogy nem követik a HTTP szabványokat, de nem igazán érdekelte őket. Szerencsére a lekérdezéseknek csak kis részéhez kellett (push notificationre regisztrálás és iskolák lekérdezése amit végül assetként json formátumban beépítettem az appba).
Te egyébként hivatalosan is programozó vagy (szülőként csinálod), vagy te is egy hobbiprogramozó diák, aki megunta a kréta hibáit?
(Amilyen szabályosan kihasználod a github funkcióit, arra következtetek, hogy már felnőtt vagy, de gondoltam megkérdezem)

@forcemagic
Copy link
Owner

forcemagic commented Sep 29, 2018

Na a plugin az tetszik mint megoldás 😁 és nem, csak hobbiként (és diákként) programozgatok :P

@boapps
Copy link

boapps commented Oct 24, 2018

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

3 participants