Files
ordinaceprojekt/Webináře/NOTES.md
T
2026-06-17 11:53:54 +02:00

91 lines
4.6 KiB
Markdown

# Webináře — hlídač nových webinářů (praktickylekar.online)
## Účel
Jednou denně (8:00, Plánovač úloh) zkontroluje [praktickylekar.online](https://www.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í). `True` je teď nastaveno.
Až bude vše ověřené → přepnout na `False` (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)
1. **Banner** na hlavní stránce: `<a href="/webinar.php?idwebinar=560">` → z něj se čte ID.
2. **Brána** `POST /check2.php` s `zdravotnicky-pracovnik=on` & `laicka-verejnost=on`
→ nastaví cookie `souhlas=1`. **Bez ní se registrační formulář vůbec nezobrazí.**
3. **Registrace** `POST /registrovat4.php`, pole:
- `email` (povinné)
- `clen` = `1` (člen SVL Ano) / `2` (Ne) → Buzalkovi `1`
- `prukaz` = čí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) a `cislo` (= `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/` ani `Medevio/.env`, proto je přibalená
kopie `telegram_notify.py` + lokální `/scripts/Webinare/.env`
(jen `TELEGRAM_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 v
`customSchedule.cron``update_cron``/etc/cron.d/root`.
- `state.json` na serveru seedován na `560` (na ten jste registrovaní).
### Nasazení / správa z Windows — `deploy_tower.py`
Heslo NIKDY v souboru, bere se z env `TOWER_PW`:
```bash
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ě
```powershell
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`.