This commit is contained in:
doms9 2025-09-05 10:42:42 -04:00
parent b049a61b73
commit 00000d93ca

View file

@ -71,7 +71,7 @@ async def get_cert(client: httpx.AsyncClient) -> ssl.SSLContext:
return ssl.create_default_context(cafile=CERT_FILE) 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() buffer = io.BytesIO()
try: try:
@ -87,8 +87,7 @@ async def fetch_xml_stream(url: str, ssl_ctx: ssl.SSLContext) -> io.BytesIO:
return buffer return buffer
except Exception as e: except Exception as e:
log.error(f"Failed to fetch {url}: {e}") log.error(f"Failed to fetch {url}: {e}")
return
return io.BytesIO(b"")
async def process_event(url: str, url_num: int) -> str | None: 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) 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",)): try:
if elem.tag == "item": dt = datetime.strptime(pub_date, pub_date_format)
title = elem.findtext("title") dt = dt.astimezone(TZ)
desc = elem.findtext("description") except Exception:
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:
elem.clear() elem.clear()
continue continue
events.append( if window_start <= dt <= window_end:
{ sport, event = (
"sport": sport, (
"event": event, desc.split(".")[0].strip(),
"title": title, " ".join(p.strip() for p in desc.split(".")[1:]),
"link": link, )
} 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 return events