4.6 KiB
Webináře — hlídač nových webinářů (praktickylekar.online)
Účel
Jednou denně (8:00, Plánovač úloh) zkontroluje praktickylekar.online,
zda přibyl nový webinář. Když ano → přes Telegram se zeptá, jestli má přihlásit
osoby z config.json (Michaela + Vladimír Buzalkovi), po potvrzení je přihlásí a
výsledek pošle zpět na Telegram. Po přihlášení chodí potvrzovací e-mail automaticky z webu.
Soubory
| Soubor | Popis |
|---|---|
watcher.py |
hlavní skript |
config.json |
URL + údaje přihlašovaných osob |
state.json |
vytvoří se sám; pamatuje poslední zpracované idwebinar |
watcher.log |
log běhů |
Přepínače v watcher.py (nahoře)
POSILATINFOPOKAZDEKONTROLE—True= pošle Telegram zprávu po každé ranní kontrole (i když nic nového; vhodné při zaběhávání).Trueje teď nastaveno. Až bude vše ověřené → přepnout naFalse(ozve se jen při novém webináři).DRY_RUN—True= nic se reálně neodešle (registrace se jen simuluje), Telegram dotaz proběhne.False= ostrý režim (reálné přihlášení po potvrzení „ano").ASK_TIMEOUT— kolik sekund ráno čekat na odpověď ano/ne (default 1800 = 30 min).
CLI
python watcher.py # ostrý denní běh
python watcher.py --test # ignoruje state + VŽDY dry-run (otestuje plumbing)
python watcher.py --reset # smaže state.json
Ověřená struktura webu (k 2026-06-17)
- Banner na hlavní stránce:
<a href="/webinar.php?idwebinar=560">→ z něj se čte ID. - Brána
POST /check2.phpszdravotnicky-pracovnik=on&laicka-verejnost=on→ nastaví cookiesouhlas=1. Bez ní se registrační formulář vůbec nezobrazí. - Registrace
POST /registrovat4.php, pole:email(povinné)clen=1(člen SVL Ano) /2(Ne) → Buzalkovi1prukaz= číslo průkazu SVL (povinné když clen=1)clk= evidenční číslo ČLK, přesně 10 znaků (pattern=.{10,10})titul1, jmeno, prijmeni, pracoviste, mesto— jen pro nečleny (clen=2)souhlas=on(souhlas se zpracováním OÚ, povinné)- skrytá
webid(= idwebinar) acislo(=PL+ DDMMRRRR, dle data webináře) → čtou se živě z formuláře, nehádají se.
Pokud provozovatel změní názvy polí / strukturu, skript loguje, co našel (
watcher.log) — podle toho se selektory upraví.
Nasazení na tower (PRODUKCE) — Unraid, python-runner
Běží na toweru (Unraid, 192.168.1.76) v kontejneru python-runner,
plánováno přes User Scripts plugin na 8:00 denně.
- Soubory:
/mnt/user/Scripts/Webinare/→ v kontejneru/scripts/Webinare/ - Telegram: na serveru není
Knihovny/aniMedevio/.env, proto je přibalená kopietelegram_notify.py+ lokální/scripts/Webinare/.env(jenTELEGRAM_BOT_TOKEN+TELEGRAM_CHAT_ID, práva 600). - Wrapper:
/boot/config/plugins/user.scripts/scripts/WebinarWatcher/script(flock+docker exec, log/mnt/user/Scripts/logs/webinar_watcher.log). - Rozvrh: záznam v
schedule.json(custom: 0 8 * * *) + řádek vcustomSchedule.cron→update_cron→/etc/cron.d/root. state.jsonna serveru seedován na560(na ten jste registrovaní).
Nasazení / správa z Windows — deploy_tower.py
Heslo NIKDY v souboru, bere se z env TOWER_PW:
TOWER_PW=... python deploy_tower.py recon # zmapuje server (jen čte)
TOWER_PW=... python deploy_tower.py deploy # nahraje soubory (+ seed state.json)
TOWER_PW=... python deploy_tower.py env # naplní serverový .env z Medevio/.env
TOWER_PW=... python deploy_tower.py smoke # test: telegram .env + detekce (neodesílá)
TOWER_PW=... python deploy_tower.py schedule # založí/aktualizuje rozvrh 8:00
TOWER_PW=... python deploy_tower.py prodrun # ruční spuštění ostrého běhu
Po změně watcher.py/config.json lokálně → deploy znovu (idempotentní,
state.json ani .env nepřepisuje).
Heartbeat → tichý režim
Server běží s POSILATINFOPOKAZDEKONTROLE=True (ranní „zkontrolováno"). Až bude
ověřeno, v lokálním watcher.py přepnout na False a deploy znovu.
Alternativa — Plánovač úloh (Windows), pokud poběží lokálně
schtasks /Create /TN "WebinarWatcher" /SC DAILY /ST 08:00 ^
/TR "python \"U:\ordinaceprojekt\Webináře\watcher.py\"" /F
Notifikace
Přes sdílenou knihovnu Knihovny/telegram_notify.py
(posli_telegram, zeptej_se_telegram), bot @Vlado_Claude_Bot,
token/chat_id z Medevio/.env.