# PGŽ SPORT — UPDATE — 29.04.2026 09:35 ## Što je dodano u nastavku run-a (nakon prvog handoff-a) ### HNS klub roster scraping (BREAKTHROUGH) - `cmd_klub` + `cmd_klub_all` u `hns_semafor.py` implementirano - `parse_match` BeautifulSoup parser za `/utakmice/{id}/{slug}/` - Iz JEDNE utakmice po klubu izvuče cijeli sastav (početni + pričuvni) - Extracted: ime, prezime, HNS player ID, pozicija (Vratar/Igrač) - TODO: broj_dresa + slika_url parser miss — vrijednosti su u DOM-u ali parser ih ne hvata pouzdano. Fix u sljedećoj iteraciji. ### Resultat scraping run-a - **218 sportaša scrape-ano** (uključujući Komadinu = 219 ukupno HNS source) - **14 PGŽ klubova s rosterom**: - NK Vrbovsko: 18 igrača - NK Krk: 18 igrača - NK Risnjak: 17 igrača - NK OŠK Omišalj: 17 igrača - NK Klana: 17 igrača - NK Lokomotiva: 16 igrača - NK Omladinac Vrata: 16 igrača - HNK Goranin: 16 igrača - NK Vihor: 15 igrača - NK Rikard Benčić: 15 igrača - HNK Kozala, NK Mune, HNK Lovran, NK Doker, NK Draga, NK Vihor (B), NK Zamet — manjci jer nemaju ili imaju malo dostupnih utakmica ### Klub fixes (RBAC blocker resolved) - Tajnik 7 (tajnik.kvarner@kk.hr) → linkan na "RUKOMETNI KLUB KVARNER KOSTRENA" (id=2166) - Tajnik 8 (tajnik.zamet@rk.hr) → linkan na "Rukometni klub ZAMET" (id=10) - user_klub_links zapis dodan za oba s role='tajnik', primary=true - RBAC test: tajnik.zamet sad vidi samo sebe (count=1) ### Duplicate cleanup - "NK Krk Krk" duplicate merge-an u canonical "NK Krk" - clanovi i utakmice_log redirected - hns_klub_id 1558 fiksan na canonical row ### Embedding refresh - Sportaši: 264 točaka u pgz_sport_v1 (220 savezi + 1637 klubovi + 264 sportaši = baseline za AI search) --- ## STATE BAZE NAKON RUN-A ```sql SELECT (SELECT count(*) FROM pgz_sport.clanovi WHERE source='hns_semafor') AS sportasi_hns, -- = 218 (SELECT count(*) FROM pgz_sport.klubovi WHERE hns_klub_id IS NOT NULL) AS klubovi_hns, -- = 17 (SELECT count(distinct klub_id) FROM pgz_sport.clanovi WHERE source='hns_semafor') AS klubova_s_rosterom -- = 14 ; ``` --- ## TODO ZA SUTRA (ažurirano) 1. **Parser fix**: broj_dresa + slika_url u match-stranici parsiranja (pristup: scope to
  • per igrač, find img.src + leading digit) 2. **HNS match log**: pretvoriti svaku scrape-anu utakmicu u utakmice_log redak (po igraču: pogoci, kartoni, minute, starter/bench) 3. **HNS season aggregator**: nakon match log popunjenja, /sportas/{id}/profile će automatski pokazati sezonske statistike 4. **HRS/HKS/HVS scrapers** — slični semafor portali za druge sportove (rukomet itd.) 5. **Frontend klub-link UI** — još nije; backend POST/DELETE /users/klub-link postoji ali bez UI 6. **Frontend permissions matrix UI** — ne postoji 7. **Sportaš ručni unos** — frontend forma za klubove za ručno upisivanje 8. **HEAD / 405** — kozmetika (root endpoint ne podržava HEAD, GET only) --- ## CRON ROUTINE - 04:00 daily: `hns_semafor.py daily` (incremental refresh poznatih igrača) - :17 hourly: embed klubovi - :27 hourly: embed sportasi - 03:30 ned: embed savezi - 02:00 pon: log truncation --- ## TEST URL (kad se vratiš) - https://api.rinet.one/sport/ — frontend (Korisnici page sad ima full CRUD) - https://api.rinet.one/sport/api/v2/klub/2200/sportasi — NK Klana roster (17 igrača) - https://api.rinet.one/sport/api/v2/sportas/145/profile — Marko Komadina - Svaki klub_id 2200..2215 s nogomet+hns_klub_id ima sportaše — možeš ih nabrajati u browser-u