e
This commit is contained in:
parent
b049a61b73
commit
00000d93ca
1 changed files with 38 additions and 40 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue