import re from bs4 import BeautifulSoup from loguru import logger from client.session import GemmaSession _ANAGRAFICA_URL = "/GSV/mvc/icrTitoli/start" _ANAGRAFICA_PARAMS = {"actionParam": "GESTIONE", "userRole": "C"} def fetch_distributori(session: GemmaSession) -> list[tuple[str, str]]: """ Recupera la lista distributori dalla pagina anagrafica GEMMA. I dati sono embedded nel JS della pagina come: var distributori = new Array({text:"...",id:...}, ...) Restituisce lista di (nome, id) ordinata per nome. """ r = session.get(_ANAGRAFICA_URL, params=_ANAGRAFICA_PARAMS) return _parse_distributori(r.text) def _parse_distributori(html: str) -> list[tuple[str, str]]: soup = BeautifulSoup(html, "html.parser") for script in soup.find_all("script"): txt = script.get_text() if "var distributori" in txt: matches = re.findall(r'\{text:"([^"]+)",id:(\d+)\}', txt) result = [(name, dist_id) for name, dist_id in matches] result.sort(key=lambda x: x[0].lower()) logger.info(f"Caricati {len(result)} distributori da JS embedded") return result logger.warning("Array distributori non trovato nel JavaScript della pagina") return []