From 00000d93caf49eccb2b0d067a831c40a505643a9 Mon Sep 17 00:00:00 2001 From: doms9 <96013514+doms9@users.noreply.github.com> Date: Fri, 5 Sep 2025 10:42:42 -0400 Subject: [PATCH] e --- M3U8/scrape/livetvsx.py | 78 ++++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 40 deletions(-) diff --git a/M3U8/scrape/livetvsx.py b/M3U8/scrape/livetvsx.py index a233bcf..b75d69b 100644 --- a/M3U8/scrape/livetvsx.py +++ b/M3U8/scrape/livetvsx.py @@ -71,7 +71,7 @@ async def get_cert(client: httpx.AsyncClient) -> ssl.SSLContext: return ssl.create_default_context(cafile=CERT_FILE) -async def fetch_xml_stream(url: str, ssl_ctx: ssl.SSLContext) -> io.BytesIO: +async def fetch_xml_stream(url: str, ssl_ctx: ssl.SSLContext) -> io.BytesIO | None: buffer = io.BytesIO() try: @@ -87,8 +87,7 @@ async def fetch_xml_stream(url: str, ssl_ctx: ssl.SSLContext) -> io.BytesIO: return buffer except Exception as e: log.error(f"Failed to fetch {url}: {e}") - - return io.BytesIO(b"") + return async def process_event(url: str, url_num: int) -> str | None: @@ -218,48 +217,47 @@ async def get_events( window_start, window_end = now - timedelta(hours=1), now + timedelta(minutes=30) - buffer = await fetch_xml_stream(url, ssl_ctx) + if buffer := await fetch_xml_stream(url, ssl_ctx): + for _, elem in ET.iterparse(buffer, events=("end",)): + if elem.tag == "item": + title = elem.findtext("title") + desc = elem.findtext("description") + pub_date = elem.findtext("pubDate") + link = elem.findtext("link") - for _, elem in ET.iterparse(buffer, events=("end",)): - if elem.tag == "item": - title = elem.findtext("title") - desc = elem.findtext("description") - pub_date = elem.findtext("pubDate") - link = elem.findtext("link") - - try: - dt = datetime.strptime(pub_date, pub_date_format) - dt = dt.astimezone(TZ) - except Exception: - elem.clear() - continue - - if window_start <= dt <= window_end: - sport, event = ( - ( - desc.split(".")[0].strip(), - " ".join(p.strip() for p in desc.split(".")[1:]), - ) - if desc - else ("", "") - ) - - key = f"[{sport}: {event}] {title}" - - if key in cached_keys: + try: + dt = datetime.strptime(pub_date, pub_date_format) + dt = dt.astimezone(TZ) + except Exception: elem.clear() continue - events.append( - { - "sport": sport, - "event": event, - "title": title, - "link": link, - } - ) + if window_start <= dt <= window_end: + sport, event = ( + ( + desc.split(".")[0].strip(), + " ".join(p.strip() for p in desc.split(".")[1:]), + ) + if desc + else ("", "") + ) - elem.clear() + key = f"[{sport}: {event}] {title}" + + if key in cached_keys: + elem.clear() + continue + + events.append( + { + "sport": sport, + "event": event, + "title": title, + "link": link, + } + ) + + elem.clear() return events