Skip to content

API endpoint pro public rozvrhy #63

@LahevOdVika

Description

@LahevOdVika

Ahoj, v dokumentaci jsem si nevšiml API endpoint pro public rozvrhy, a tak jsem se prošťoural v aplikaci bakalářů, a něco jsem našel.

/api/3/timetable/permanent/class/:classId
/api/3/timetable/student/:studentId
/api/3/timetable/actual/class/:classId

Myslím že fungují velmi podobně jako normální /timetable/actual a permanent, akorát tady je potřeba classId nebo studentId.
Co jsem tak zjišťoval, tak classId je 2 místná kombinace čísla 0 - 9 a pouze velkých písmen, celkem 36 různých charakterů, takže 36 ^ 2 = 1296 kombinací. Větší problém je pak najít ID studentů a učitelů, ty jsou už pěti místné, takže 60466176 kombinací. Bakaláře (alespoň u nás ve škole) nejsou vůbec stavěné na brute force těch IDček, a bohužel jsem nenašel žádný json kde by byly, server to prostě zpracovává sám a nám posílá už hotové html.

Kdyby náhodou to chtěl někdo zkusit, rychle jsem splácal tenhle python script

import requests
import itertools
import string
import time

charset = string.digits + string.ascii_uppercase
codes = [''.join(c) for c in itertools.product(charset, repeat=2)]

url_template = "https://truhla.bakalari.cz/api/3/timetable/permanent/class/{}"

api_key = ""

headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Authorization": f"Bearer {api_key}",
    "User-Agent": "Mozilla/5.0"
}

for code in codes:
    url = url_template.format(code)
    try:
        response = requests.get(url, headers=headers, timeout=5)
        if response.status_code == 200:
            print(f"✅ Found valid classcode: {code}")
    except requests.RequestException as e:
        print(f"⚠ Error for {code}: {e}")

    time.sleep(2) //Pokus o předejití DDoS obavám ze strany IT správců, ale asi to ani nemá smysl

Jediný způsob na který jsem přišel, jak zjistit ty IDčka je jít na stránku veřejného rozvrhu, podívats se do HTML těch tagů a manuálně to z toho vytáhnout. Poslal bych i nějaké fotky těch bakalářu aby bylo lépe vidět o čem mluvím, ale v době psaní zase spadly, takže nic. Mimochode, je zajímavé že jsem to našel v mobilní apce, přitom jsem si nevšiml, že by tam přibyla funkce na public rozvrhy. To je asi taky důvod, proč jsem nenašel žádný json s těmi ID.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions