import urllib3 import requests from loguru import logger urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) BASE_URL = "https://gsv.apps.mediaset.it" _HEADERS = { "accept": "text/html, */*; q=0.01", "accept-language": "it,it-IT;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", "content-type": "application/x-www-form-urlencoded", "x-requested-with": "XMLHttpRequest", } class SessionExpiredError(Exception): pass class GemmaSession: def __init__(self): self._session: requests.Session | None = None self.jsessionid: str = "" @property def connected(self) -> bool: return self._session is not None def connect(self, jsessionid: str) -> None: self.jsessionid = jsessionid.strip() s = requests.Session() s.cookies.set("JSESSIONID", self.jsessionid, domain="gsv.apps.mediaset.it") s.headers.update(_HEADERS) s.verify = False self._session = s logger.info("Sessione GEMMA configurata") def disconnect(self) -> None: self._session = None self.jsessionid = "" logger.info("Sessione disconnessa") def get(self, path: str, params: dict | None = None) -> requests.Response: r = self._session.get(BASE_URL + path, params=params) self._check(r) return r def post(self, path: str, data: dict | None = None) -> requests.Response: r = self._session.post(BASE_URL + path, data=data) self._check(r) return r def _check(self, r: requests.Response) -> None: url_lower = r.url.lower() if "unauthorized" in url_lower or "/login" in url_lower: self._session = None raise SessionExpiredError("Sessione GEMMA scaduta — reinserisci il JSESSIONID")