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)
|
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
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue