Giter Club home page Giter Club logo

bakalari-api-v3's Introduction

Bakaláři API

Dokumentace mobilního API bakalářů

⚠️ Bakaláři nyní používají API v3 (dokumentace zde). Tato dokumentace se týká API v1. ⚠️

URL

Vše se odehrává na adrese institutu (školy). Pro zjednodušení budu používat doménu www.example.com. Veškeré API dotazy směřují na /login.aspx a to i v případě, že adresa používá nové webové rozhraní next (např. https://www.example.com/login.aspx)

Dotazy

Každý dotaz (vyjma získání tokenu) se skládá z tokenu (hx) a názvu modulu (pm), případně dalších parametrů jako například data. Příklad: https://www.example.com/login.aspx?hx=m_1dM0sdoUC3bKRkMdiyjc9IaOkOPyNvpq66zuwIu2eHUtYvkLwrUtHHPR6iNe1KOtA2HgSZtuoBWdido79VjQ==&pm=rozvrh. Vrací XML, které je popsáno u jednotlivých modulů.

Notifikace

V rámci aplikace Bakalářů fungují i notifikace.

Programy postavené na tomto API

Některé další programy a nástroje pracující s tímto API najdete na https://github.com/bakalari-api.

Moduly

bakalari-api-v3's People

Contributors

danielkrasny avatar felycz avatar jenyyk avatar lastaapps avatar milankolecek avatar mvolfik avatar ondomatej avatar ondraczsk avatar ortieez avatar panjohnny avatar schizza avatar soptikha2 avatar tmatejicek avatar tomsanik avatar vitkolos avatar vitskalicky avatar yesseruser avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bakalari-api-v3's Issues

API pro volné moduly webové aplikace

Ahoj,
neví někdo jestli existuje api pro volné moduly? S rozvrhem na mojí škole často bývají problémy - mobilní a webová aplikace ukazuje suplování jen dva dny dopředu, stránky školy ukazují suplování až do příštího pondělí, ale /Timetable/public bývá nejspolehlivější s dvoutýdenním rozsahem (i když se také někdy neshoduje).
Kromě parsování html se mi nepodařilo přijít na lepší způsob jak by se odsud dalo získat data.

Problém s client_id

Dobrý den, zkouším udělat aplikaci pro Bakaláře ale narazil jsem na problém. Hází mi to klasickou invalid_client chybu. Má tam být ANDR? Pokud ne, co tedy?

API přistup

Ahoj, chtěl bych se zeptat jestli by mi někdo poradil jak získávat api z bakalářů, protože přesně nerozumím dokumentaci. Práci s API dělám poprvé a nechápu přesně jak zařídit přihlášení, přesněji jak poslat požadavek abych získal access token a ani jak požadavek napsat. Aplikaci dělám v C# Maui a nerozumím přesně ani co znamená content-type ani jak se to používá. Jediné co jsem zatím dělal v jiném projektu bylo že jsem na konkrétní stránce bez přihlášení mohl navolit které api potřebuji a následně vygenerovaný JSON jsem pouze konvertoval do c# a vložil do třídy a druhou třídu jsem použil na vytvoření httpClient. Kdyby mi to někdo dokázal poradit tak bych byl vděčný. Díky

Automatická autentizace

V mobilní aplikaci je tlačítko (vpravo nahoře), které uživatele odkáže na adresu /api/3/login/TOKEN?returnUrl=dashboard. Nepodařilo se někomu zjistit, co je to za token? Zkoušel jsem refresh, ale nefunguje.

Způsob jak sniffovat requesty

V bakalari-api/bakalari-api#51 je zmíněné že nová aplikace ignoruje systémovou proxy, tak jsem jenom chtěl zmínit šikovný způsob jak to lze (po úvodním setupu jednoduše) odposlouchávat:

  1. Budete potřebovat veřejnou doménu. Můžete použít subdoménu nějaké kterou už máte, nebo si jednu sehnat zadarmo na freenom.com (.tk, .cf apod)
  2. Pro danou doménu přes Let's Encrypt certbota získejte ssl certifikát (aplikace nefunguje jen přes http)
  3. cat /path/to/certbot/live/vase-domena.tk/fullchain.pem /path/to/certbot/live/vase-domena.tk/privkey.pem > bundle.pem
  4. Stáhněte si mitmproxy
  5. Změnte DNS záznam té domény na IP adresu vašeho počítače na lokální síti (10.0.0.x, 192.168.0.x apod)
  6. sudo mitmproxy --mode reverse:https://bakalari.vaseskola.cz --certs vase-domena.tk=/cesta/k/bundle.pem -p 443 (sudo je potřeba abyste mohli bindovat port 443)
  7. Spusťte na stejné lokální síti aplikaci, zadejte přihlašovací údaje pro vaší školu, ale použijte tu vaši doménu, která směřuje na váš počítač.
  8. Profit Vidíte veškerý traffic, případně můžete requesty zastavovat a upravovat request/response, viz dokumentace mitmproxy.

Podmínky pro použití API

Dobrý den,
rád bych se zeptal na podmínky použití API aplikace Bakaláři. Konkrétně mě zajímá:

  1. Jaké jsou podmínky a požadavky pro používání API aplikace Bakaláři?
  2. Je povoleno využívat API aplikace Bakaláři pro komerční účely?

Předem děkuji za odpověď.

Po jak dlouhé době mám updatovat token

používám api/login který mi řekne, že token vyprší za 3599 vůbec nechápu co se tím bakaláři snaží říct. Jaké to jsou jednotky času? Programuji teď Java wrapper pro V3 bakaláři API a chtěl bych obnovovat token automaticky.

Room a Teacher ID -> jméno

Je nějaký endpoint, který by mi dokázal buďto vrátil list všech učitelů/místností nebo info o daném učiteli podle ID? Nikde v dokumentaci jsem nenašel něco, co by mi s tímto pomohlo

Získání rozvrhu na další den

Nemůžu se dostat k rozvrhu na další den, request má formát: https://bakalari.mojeskola.cz/api/3/timetable/actual?date=2022-11-15
Dnes je 14, pokud zadám do requestu jakýkoliv den předtím tak to normálně funguje, pokud ale zadám zítřek atd, tak to stále vypisuje dnešek.
Je to chyba u mě?

Dá se zjistit seznam všech škol, které používají Bakaláře a jejich URL?

API Potřebuje dávat requesty na specifickou doménu té školy, aby se přihlásil uživatel z té školy. Nejde používat třeba doména jen jedné školy, protože by nešel login ostatních userů z ostatních škol. Má otázka zní:
je někde seznam všech škol, které používají Bakaláře a jejich domény? Bylo by potom mnohem lehčí pro uživatele, aby tam měl jen dropdown a on si vybral školu svoji, než tam musel dávát dlouhou doménu té školy.

Baka4J - Java wrapper pro bakaláři api v3

Chci jenom sdílet můj open-source projekt. Je to wrapper pro Javu. Byl bych rád kdyby mi někdo pomohl. Zatím jsem toho moc neudělal, ale pracuji na dalších endpointech. To co bakaláři vracejí je fakt strašný. Teď dělám na známkách, ale postupně chci zpracovat vše.

Děkuji a přeji hezký den.

Baka4J tady

Odesílání úkolů a označení za hotové

Ahoj.
Přes Bakaláře se dají úkoly zobrazit - to se mi podařilo, ale dají se i odesílat a dají se označit jako hotové.
Přišel už někdo na to, jak to udělat pomocí API? V endpointech jsem to nenašel, ale dost by se to hodilo.
Děkuju

Absence mají špatnou analýzu

Endpoint absencí má špatnou analýzu.

{
      "Date": "2022-09-05T00:00:00+02:00",
      "Unsolved": 0,
      "Ok": 8,
      "Missed": 0,
      "Late": 0,
      "Soon": 0,
      "School": 0,
      "DistanceTeaching": 0
    },

Nově je tam políčko DistanceTeaching

Token

Dobrý den,
vytvářím Discord bota pro Bakaláře (vzhledem k velké poptávce studentů) a potýkám se s jedním zásadním problémem a totiž jak uložit přístupové údaje a napadl mne jednodušší způsob pomocí tokenu, který by si jednoduše každý student nějak vygeneroval.
Je toto nějak možné či Vás napadá lepší varianta?

Předem děkuji za odpověď
Martin S.

OFFTOPIC: PID Lítačka API

Ahoj,
tohle se úplně netýká Baka API, ale protože neznám skupinu lidí, co by se lépe vyznala v revezním engineeringu, tak se zkusím zeptat.
Už delší dobu plánuju napsat si PID Lítačka appku pro Wear OS, tj. do Androidích hodinek - abych při kontrole v autobusech nemusel vytahovat telefon a mohl prostě ukázat hodinky. Mám už docela přehled o fungování API z aplikace PID Lítačka pro Android a taky zhruba vím, podle čeho se generuje QR kód pro inspekci.
Jediné, na co pořád nemůžu přijít, je parametr X-PTS. Tenhle parametr se jako jediný v QR kódu periodicky mění (každých 30 sekund - v xx:xx:00 a xx:xx:30). Je to alfanumerický čtyřznakový string, tady jsou nějaké příklady:
L3HR
5K4H
Netuší někdo, jak by tahle věc mohla vznikat? Je to jakási forma timestampu, stejnou zkratku má Presentation timestamp (https://en.wikipedia.org/wiki/Presentation_timestamp), ale to asi bude něco jiného.
V aplikaci je také nějaké volání na endpoint /api/v3/time-keys, které vrací něco takovéhohle:
[
"e654cb6d",
"16d589f2"
]
Ale dekompilace nebyla tak dokonalá, abych si byl jistý, že se tyhle stringy reálně využívají k tvorbě X-PTS.
Budu moc rád za jakékoliv nápady a kdyby se někdo chtěl připojit k tvorbě aplikace pro hodinky, budu moc rád. Kdyby měl někdo čas kouknout se i dovnitř oficiální aplikace, přikládám odkaz na APK: https://apkpure.com/pid-litacka/cz.dpp.praguepublictransport/download?from=details
Milan

Campaign, reklamy (informační kanál?)

Zkoumal jsem, jaké requesty se posílají ve webové aplikaci, a vypadá to, že endpoint campaign (https://campaign.bakalari.cz/bannerinfo/$Location/$CampaignCategoryCode) slouží k získávání dat o reklamách (tedy dat ke generování/zobrazování reklamních bannerů). V dokumentaci tomu říkáme informační kanál, nejsem si jistý, jestli je to úplně vhodné označení, ale budiž. 😄

Dost informací se dá zjistil ze skriptu /next/js/Widgets/Commercial.js.

Jinak z pozorování, které jsem provedl ve webové aplikaci jsem zjistil, že kromě $Location může mít kromě mobileapp ještě hodnoty LargeBanner a SmallBannersPanel. Druhou zajímavostí je pro mě fakt, že se $CampaignCategoryCode liší od toho mobilního – v mém případě je tam totiž zakódovaná špatná hodnota roku studia, konkrétně "sy":12.

Na základě zmíněného JSONu jsem zrekonstruoval pravděpodobnou strukturu dat:

{
    "banners": [
        {
            "messageId": 123,
            "linkUrl": "https://www.example.com",
            "authorized": true,
            "imageUrl": "https://www.example.com/image.png",
        },
        {
            "messageId": 456,
            "linkUrl": "https://www.example.com/xyz",
            "authorized": false,
            "imageUrl": "https://www.example.com/image2.png",
        }
    ]
}

Zajímalo by mě, jak se chová vaše webová aplikace a jestli si myslíte, že má smysl něco takového zanést do dokumentace.

Jak se přihlásit

Dobrý den koukal jsem se na login. Bohužel jse mi nevede poslat post request správně a nevím jak to spravit.

Na jaké url bych měl směřovat post a jak?

Děkuji

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.