This commit is contained in:
doms9 2025-12-23 13:28:56 -05:00
parent 4210d7dd18
commit 00000d9cb2
11 changed files with 342 additions and 321 deletions

View file

@ -64,12 +64,13 @@ async def main() -> None:
asyncio.create_task(streamsgate.scrape()), asyncio.create_task(streamsgate.scrape()),
asyncio.create_task(strmd.scrape()), asyncio.create_task(strmd.scrape()),
asyncio.create_task(tvpass.scrape()), asyncio.create_task(tvpass.scrape()),
# asyncio.create_task(watchfooty.scrape()),
asyncio.create_task(webcast.scrape()), asyncio.create_task(webcast.scrape()),
] ]
await asyncio.gather(*tasks) await asyncio.gather(*tasks)
await watchfooty.scrape()
additions = ( additions = (
embedhd.urls embedhd.urls
| fawa.urls | fawa.urls

View file

@ -89,46 +89,48 @@ async def scrape() -> None:
async with async_playwright() as p: async with async_playwright() as p:
browser, context = await network.browser(p) browser, context = await network.browser(p)
for i, ev in enumerate(events, start=1): try:
handler = partial( for i, ev in enumerate(events, start=1):
network.process_event, handler = partial(
url=ev["link"], network.process_event,
url_num=i, url=ev["link"],
context=context, url_num=i,
log=log, context=context,
) log=log,
url = await network.safe_process(
handler,
url_num=i,
semaphore=network.PW_S,
log=log,
)
if url:
sport, event, link, ts = (
ev["sport"],
ev["event"],
ev["link"],
ev["timestamp"],
) )
tvg_id, logo = leagues.get_tvg_info(sport, event) url = await network.safe_process(
handler,
url_num=i,
semaphore=network.PW_S,
log=log,
)
key = f"[{sport}] {event} ({TAG})" if url:
sport, event, link, ts = (
ev["sport"],
ev["event"],
ev["link"],
ev["timestamp"],
)
entry = { tvg_id, logo = leagues.get_tvg_info(sport, event)
"url": url,
"logo": logo,
"base": "https://vividmosaica.com/",
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry key = f"[{sport}] {event} ({TAG})"
await browser.close() entry = {
"url": url,
"logo": logo,
"base": "https://vividmosaica.com/",
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry
finally:
await browser.close()
if new_count := len(cached_urls) - cached_count: if new_count := len(cached_urls) - cached_count:
log.info(f"Collected and cached {new_count} new event(s)") log.info(f"Collected and cached {new_count} new event(s)")

View file

@ -88,16 +88,18 @@ async def scrape() -> None:
async with async_playwright() as p: async with async_playwright() as p:
browser, context = await network.browser(p) browser, context = await network.browser(p)
handler = partial(get_events, context=context) try:
handler = partial(get_events, context=context)
events = await network.safe_process( events = await network.safe_process(
handler, handler,
url_num=1, url_num=1,
semaphore=network.PW_S, semaphore=network.PW_S,
log=log, log=log,
) )
await browser.close() finally:
await browser.close()
urls.update(events or {}) urls.update(events or {})

View file

@ -110,48 +110,50 @@ async def scrape() -> None:
async with async_playwright() as p: async with async_playwright() as p:
browser, context = await network.browser(p, browser="external") browser, context = await network.browser(p, browser="external")
for i, ev in enumerate(events, start=1): try:
handler = partial( for i, ev in enumerate(events, start=1):
network.process_event, handler = partial(
url=ev["link"], network.process_event,
url_num=i, url=ev["link"],
context=context, url_num=i,
timeout=6, context=context,
log=log, timeout=6,
) log=log,
url = await network.safe_process(
handler,
url_num=i,
semaphore=network.PW_S,
log=log,
)
if url:
sport, event, logo, ts, link = (
ev["sport"],
ev["event"],
ev["logo"],
ev["timestamp"],
ev["link"],
) )
key = f"[{sport}] {event} ({TAG})" url = await network.safe_process(
handler,
url_num=i,
semaphore=network.PW_S,
log=log,
)
tvg_id, pic = leagues.get_tvg_info(sport, event) if url:
sport, event, logo, ts, link = (
ev["sport"],
ev["event"],
ev["logo"],
ev["timestamp"],
ev["link"],
)
entry = { key = f"[{sport}] {event} ({TAG})"
"url": url,
"logo": logo or pic,
"base": base_url,
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry tvg_id, pic = leagues.get_tvg_info(sport, event)
await browser.close() entry = {
"url": url,
"logo": logo or pic,
"base": base_url,
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry
finally:
await browser.close()
if new_count := len(cached_urls) - cached_count: if new_count := len(cached_urls) - cached_count:
log.info(f"Collected and cached {new_count} new event(s)") log.info(f"Collected and cached {new_count} new event(s)")

View file

@ -109,45 +109,47 @@ async def scrape() -> None:
async with async_playwright() as p: async with async_playwright() as p:
browser, context = await network.browser(p, browser="external") browser, context = await network.browser(p, browser="external")
for i, ev in enumerate(events, start=1): try:
handler = partial( for i, ev in enumerate(events, start=1):
network.process_event, handler = partial(
url=ev["link"], network.process_event,
url_num=i, url=ev["link"],
context=context, url_num=i,
log=log, context=context,
) log=log,
url = await network.safe_process(
handler,
url_num=i,
semaphore=network.PW_S,
log=log,
)
if url:
sport, event, link = (
ev["sport"],
ev["event"],
ev["link"],
) )
key = f"[{sport}] {event} ({TAG})" url = await network.safe_process(
handler,
url_num=i,
semaphore=network.PW_S,
log=log,
)
tvg_id, logo = leagues.get_tvg_info(sport, event) if url:
sport, event, link = (
ev["sport"],
ev["event"],
ev["link"],
)
entry = { key = f"[{sport}] {event} ({TAG})"
"url": url,
"logo": logo,
"base": "https://vividmosaica.com/",
"timestamp": now,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry tvg_id, logo = leagues.get_tvg_info(sport, event)
await browser.close() entry = {
"url": url,
"logo": logo,
"base": "https://vividmosaica.com/",
"timestamp": now,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry
finally:
await browser.close()
if new_count := len(cached_urls) - cached_count: if new_count := len(cached_urls) - cached_count:
log.info(f"Collected and cached {new_count} new event(s)") log.info(f"Collected and cached {new_count} new event(s)")

View file

@ -107,46 +107,48 @@ async def scrape() -> None:
async with async_playwright() as p: async with async_playwright() as p:
browser, context = await network.browser(p, browser="external") browser, context = await network.browser(p, browser="external")
for i, ev in enumerate(events, start=1): try:
handler = partial( for i, ev in enumerate(events, start=1):
network.process_event, handler = partial(
url=ev["link"], network.process_event,
url_num=i, url=ev["link"],
context=context, url_num=i,
log=log, context=context,
) log=log,
url = await network.safe_process(
handler,
url_num=i,
semaphore=network.PW_S,
log=log,
)
if url:
sport, event, ts, link = (
ev["sport"],
ev["event"],
ev["timestamp"],
ev["link"],
) )
key = f"[{sport}] {event} ({TAG})" url = await network.safe_process(
handler,
url_num=i,
semaphore=network.PW_S,
log=log,
)
tvg_id, logo = leagues.get_tvg_info(sport, event) if url:
sport, event, ts, link = (
ev["sport"],
ev["event"],
ev["timestamp"],
ev["link"],
)
entry = { key = f"[{sport}] {event} ({TAG})"
"url": url,
"logo": logo,
"base": "https://streamcenter.xyz",
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry tvg_id, logo = leagues.get_tvg_info(sport, event)
await browser.close() entry = {
"url": url,
"logo": logo,
"base": "https://streamcenter.xyz",
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry
finally:
await browser.close()
if new_count := len(cached_urls) - cached_count: if new_count := len(cached_urls) - cached_count:
log.info(f"Collected and cached {new_count} new event(s)") log.info(f"Collected and cached {new_count} new event(s)")

View file

@ -151,48 +151,50 @@ async def scrape() -> None:
async with async_playwright() as p: async with async_playwright() as p:
browser, context = await network.browser(p, browser="external") browser, context = await network.browser(p, browser="external")
for i, ev in enumerate(events, start=1): try:
handler = partial( for i, ev in enumerate(events, start=1):
network.process_event, handler = partial(
url=ev["link"], network.process_event,
url_num=i, url=ev["link"],
context=context, url_num=i,
timeout=5, context=context,
log=log, timeout=5,
) log=log,
url = await network.safe_process(
handler,
url_num=i,
semaphore=network.PW_S,
log=log,
)
if url:
sport, event, logo, link, ts = (
ev["sport"],
ev["event"],
ev["logo"],
ev["link"],
ev["event_ts"],
) )
key = f"[{sport}] {event} ({TAG})" url = await network.safe_process(
handler,
url_num=i,
semaphore=network.PW_S,
log=log,
)
tvg_id, pic = leagues.get_tvg_info(sport, event) if url:
sport, event, logo, link, ts = (
ev["sport"],
ev["event"],
ev["logo"],
ev["link"],
ev["event_ts"],
)
entry = { key = f"[{sport}] {event} ({TAG})"
"url": url,
"logo": logo or pic,
"base": "https://storytrench.net/",
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry tvg_id, pic = leagues.get_tvg_info(sport, event)
await browser.close() entry = {
"url": url,
"logo": logo or pic,
"base": "https://storytrench.net/",
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry
finally:
await browser.close()
if new_count := len(cached_urls) - cached_count: if new_count := len(cached_urls) - cached_count:
log.info(f"Collected and cached {new_count} new event(s)") log.info(f"Collected and cached {new_count} new event(s)")

View file

@ -139,46 +139,48 @@ async def scrape() -> None:
async with async_playwright() as p: async with async_playwright() as p:
browser, context = await network.browser(p, browser="external") browser, context = await network.browser(p, browser="external")
for i, ev in enumerate(events, start=1): try:
handler = partial( for i, ev in enumerate(events, start=1):
network.process_event, handler = partial(
url=ev["link"], network.process_event,
url_num=i, url=ev["link"],
context=context, url_num=i,
log=log, context=context,
) log=log,
url = await network.safe_process(
handler,
url_num=i,
semaphore=network.PW_S,
log=log,
)
if url:
sport, event, ts, link = (
ev["sport"],
ev["event"],
ev["timestamp"],
ev["link"],
) )
key = f"[{sport}] {event} ({TAG})" url = await network.safe_process(
handler,
url_num=i,
semaphore=network.PW_S,
log=log,
)
tvg_id, logo = leagues.get_tvg_info(sport, event) if url:
sport, event, ts, link = (
ev["sport"],
ev["event"],
ev["timestamp"],
ev["link"],
)
entry = { key = f"[{sport}] {event} ({TAG})"
"url": url,
"logo": logo,
"base": BASE_URL,
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry tvg_id, logo = leagues.get_tvg_info(sport, event)
await browser.close() entry = {
"url": url,
"logo": logo,
"base": BASE_URL,
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry
finally:
await browser.close()
if new_count := len(cached_urls) - cached_count: if new_count := len(cached_urls) - cached_count:
log.info(f"Collected and cached {new_count} new event(s)") log.info(f"Collected and cached {new_count} new event(s)")

View file

@ -139,47 +139,49 @@ async def scrape() -> None:
async with async_playwright() as p: async with async_playwright() as p:
browser, context = await network.browser(p, browser="external") browser, context = await network.browser(p, browser="external")
for i, ev in enumerate(events, start=1): try:
handler = partial( for i, ev in enumerate(events, start=1):
network.process_event, handler = partial(
url=ev["link"], network.process_event,
url_num=i, url=ev["link"],
context=context, url_num=i,
log=log, context=context,
) log=log,
url = await network.safe_process(
handler,
url_num=i,
semaphore=network.PW_S,
log=log,
)
if url:
sport, event, logo, ts, link = (
ev["sport"],
ev["event"],
ev["logo"],
ev["timestamp"],
ev["link"],
) )
key = f"[{sport}] {event} ({TAG})" url = await network.safe_process(
handler,
url_num=i,
semaphore=network.PW_S,
log=log,
)
tvg_id, pic = leagues.get_tvg_info(sport, event) if url:
sport, event, logo, ts, link = (
ev["sport"],
ev["event"],
ev["logo"],
ev["timestamp"],
ev["link"],
)
entry = { key = f"[{sport}] {event} ({TAG})"
"url": url,
"logo": logo or pic,
"base": "https://embedsports.top/",
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry tvg_id, pic = leagues.get_tvg_info(sport, event)
await browser.close() entry = {
"url": url,
"logo": logo or pic,
"base": "https://embedsports.top/",
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry
finally:
await browser.close()
if new_count := len(cached_urls) - cached_count: if new_count := len(cached_urls) - cached_count:
log.info(f"Collected and cached {new_count} new event(s)") log.info(f"Collected and cached {new_count} new event(s)")

View file

@ -261,51 +261,53 @@ async def scrape() -> None:
if events: if events:
async with async_playwright() as p: async with async_playwright() as p:
browser, context = await network.browser(p) browser, context = await network.browser(p, browser="external")
for i, ev in enumerate(events, start=1): try:
handler = partial( for i, ev in enumerate(events, start=1):
process_event, handler = partial(
url=ev["link"], process_event,
url_num=i, url=ev["link"],
context=context, url_num=i,
) context=context,
)
url, iframe = await network.safe_process( url, iframe = await network.safe_process(
handler, handler,
url_num=i, url_num=i,
semaphore=network.PW_S, semaphore=network.PW_S,
log=log, log=log,
) )
sport, event, logo, ts, link = ( sport, event, logo, ts, link = (
ev["sport"], ev["sport"],
ev["event"], ev["event"],
ev["logo"], ev["logo"],
ev["timestamp"], ev["timestamp"],
ev["link"], ev["link"],
) )
key = f"[{sport}] {event} ({TAG})" key = f"[{sport}] {event} ({TAG})"
tvg_id, pic = leagues.get_tvg_info(sport, event) tvg_id, pic = leagues.get_tvg_info(sport, event)
entry = { entry = {
"url": url, "url": url,
"logo": logo or pic, "logo": logo or pic,
"base": iframe, "base": iframe,
"timestamp": ts, "timestamp": ts,
"id": tvg_id or "Live.Event.us", "id": tvg_id or "Live.Event.us",
"link": link, "link": link,
} }
cached_urls[key] = entry cached_urls[key] = entry
if url: if url:
valid_count += 1 valid_count += 1
urls[key] = entry urls[key] = entry
await browser.close() finally:
await browser.close()
if new_count := valid_count - cached_count: if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)") log.info(f"Collected and cached {new_count} new event(s)")

View file

@ -129,46 +129,48 @@ async def scrape() -> None:
async with async_playwright() as p: async with async_playwright() as p:
browser, context = await network.browser(p) browser, context = await network.browser(p)
for i, ev in enumerate(events, start=1): try:
handler = partial( for i, ev in enumerate(events, start=1):
network.process_event, handler = partial(
url=ev["link"], network.process_event,
url_num=i, url=ev["link"],
context=context, url_num=i,
log=log, context=context,
) log=log,
url = await network.safe_process(
handler,
url_num=i,
semaphore=network.PW_S,
log=log,
)
if url:
sport, event, ts, link = (
ev["sport"],
ev["event"],
ev["event_ts"],
ev["link"],
) )
key = f"[{sport}] {event} ({TAG})" url = await network.safe_process(
handler,
url_num=i,
semaphore=network.PW_S,
log=log,
)
tvg_id, logo = leagues.get_tvg_info(sport, event) if url:
sport, event, ts, link = (
ev["sport"],
ev["event"],
ev["event_ts"],
ev["link"],
)
entry = { key = f"[{sport}] {event} ({TAG})"
"url": url,
"logo": logo,
"base": BASE_URLS[sport],
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry tvg_id, logo = leagues.get_tvg_info(sport, event)
await browser.close() entry = {
"url": url,
"logo": logo,
"base": BASE_URLS[sport],
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry
finally:
await browser.close()
if new_count := len(cached_urls) - cached_count: if new_count := len(cached_urls) - cached_count:
log.info(f"Collected and cached {new_count} new event(s)") log.info(f"Collected and cached {new_count} new event(s)")