Compare commits

...

36 commits

Author SHA1 Message Date
GitHub Actions Bot
8df77c1f13 health log 2026-03-02 09:06:28 +00:00
doms9
00000d9a1a e 2026-03-02 00:50:28 -05:00
doms9
00000d99d6 e 2026-03-02 00:16:08 -05:00
GitHub Actions Bot
8cce8ad100 update M3U8 2026-03-01 23:31:16 -05:00
GitHub Actions Bot
b5061cdd03 update EPG 2026-03-02 04:28:16 +00:00
GitHub Actions Bot
75efc3c941 health log 2026-03-02 04:25:45 +00:00
GitHub Actions Bot
2878cdcc27 update M3U8 2026-03-01 23:00:50 -05:00
GitHub Actions Bot
17cee4ec61 update M3U8 2026-03-01 22:30:25 -05:00
GitHub Actions Bot
e35e83bc48 update M3U8 2026-03-01 22:00:59 -05:00
GitHub Actions Bot
77220d65e9 update M3U8 2026-03-01 21:31:13 -05:00
GitHub Actions Bot
6557c7205c update M3U8 2026-03-01 21:01:20 -05:00
GitHub Actions Bot
5bf1521b42 update M3U8 2026-03-01 20:31:55 -05:00
GitHub Actions Bot
ef89a251a8 update M3U8 2026-03-01 20:03:23 -05:00
GitHub Actions Bot
1a22f3433f update M3U8 2026-03-01 19:31:05 -05:00
GitHub Actions Bot
5df70b8bec update M3U8 2026-03-01 19:03:00 -05:00
GitHub Actions Bot
3cd2e871d6 update M3U8 2026-03-01 18:33:19 -05:00
GitHub Actions Bot
7d05f3bbac update M3U8 2026-03-01 18:04:08 -05:00
GitHub Actions Bot
f8f7ddb548 update M3U8 2026-03-01 17:32:18 -05:00
GitHub Actions Bot
c28a7b47c7 update M3U8 2026-03-01 17:03:49 -05:00
GitHub Actions Bot
4789a950bc update M3U8 2026-03-01 16:32:22 -05:00
GitHub Actions Bot
b71d8569c4 update M3U8 2026-03-01 16:07:23 -05:00
GitHub Actions Bot
d699184f6d health log 2026-03-01 20:47:46 +00:00
GitHub Actions Bot
aae77ccf14 update M3U8 2026-03-01 15:34:17 -05:00
GitHub Actions Bot
4901003d7f update M3U8 2026-03-01 15:08:45 -05:00
GitHub Actions Bot
4d5e99c878 update M3U8 2026-03-01 14:33:54 -05:00
GitHub Actions Bot
1419875514 update M3U8 2026-03-01 14:05:08 -05:00
GitHub Actions Bot
68acaa199b update EPG 2026-03-01 19:01:45 +00:00
GitHub Actions Bot
33bbc053aa update M3U8 2026-03-01 13:33:25 -05:00
GitHub Actions Bot
ab48ba22ac update M3U8 2026-03-01 13:09:34 -05:00
GitHub Actions Bot
0116d44977 update M3U8 2026-03-01 12:09:47 -05:00
GitHub Actions Bot
4c579ea05a update M3U8 2026-03-01 11:14:07 -05:00
GitHub Actions Bot
54f0898b6b update M3U8 2026-03-01 10:09:32 -05:00
GitHub Actions Bot
c48485e2ae health log 2026-03-01 14:47:54 +00:00
GitHub Actions Bot
198d310110 update M3U8 2026-03-01 09:10:15 -05:00
GitHub Actions Bot
69146613e9 update M3U8 2026-03-01 08:05:15 -05:00
GitHub Actions Bot
31a686e66e update EPG 2026-03-01 10:56:33 +00:00
30 changed files with 119226 additions and 115446 deletions

File diff suppressed because it is too large Load diff

228885
M3U8/TV.xml

File diff suppressed because one or more lines are too long

View file

@ -3,7 +3,7 @@
#EXTINF:-1 tvg-chno="1" tvg-id="A.and.E.HD.East.us2" tvg-name="A&E TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s51529_dark_360w_270h.png" group-title="TV",A&E TV
http://41.205.93.154/AandE/index.m3u8
#EXTINF:-1 tvg-chno="2" tvg-id="KMBC-DT.us_locals1" tvg-name="ABC" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10003_dark_360w_270h.png" group-title="TV",ABC
#EXTINF:-1 tvg-chno="2" tvg-id="ABC.National.Feed.us2" tvg-name="ABC" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10003_dark_360w_270h.png" group-title="TV",ABC
http://stream.cammonitorplus.net/1790/index.m3u8?token=MnE3ZWg1YkgxdFdWZlo2c2hLMkltWnJhcFo1OHhxcXVyb2pKazZXaWxZRERxNEduaVp1UnBxU2VlWmF0ZnRlRGxaMm1zNStDbnJOOXFZMlhtcStybmc9PQ==
#EXTINF:-1 tvg-chno="3" tvg-id="ACC.Network.us2" tvg-name="ACC Network" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s111871_dark_360w_270h.png" group-title="TV",ACC Network
@ -43,7 +43,7 @@ http://212.102.60.231/BET/index.m3u8
http://23.237.104.106:8080/USA_BTN/index.m3u8
#EXTINF:-1 tvg-chno="15" tvg-id="Bloomberg.HD.us2" tvg-name="Bloomberg TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s71799_dark_360w_270h.png" group-title="TV",Bloomberg TV
https://live-manifest.production-public.tubi.io/live/a5aabf5a-9615-4987-8163-18edfa1360c6/playlist.m3u8
http://41.205.93.154/BLOOMBERG/index.m3u8
#EXTINF:-1 tvg-chno="16" tvg-id="Boomerang.us2" tvg-name="Boomerang" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s21883_dark_360w_270h.png" group-title="TV",Boomerang
http://23.237.104.106:8080/USA_BOOMERANG/index.m3u8
@ -63,7 +63,7 @@ http://mytvstream.net:8080/live/bn80NG/909467/136589.m3u8
#EXTINF:-1 tvg-chno="21" tvg-id="Cartoon.Network.HD.us2" tvg-name="Cartoon Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s12131_dark_360w_270h.png" group-title="TV",Cartoon Network
http://23.237.104.106:8080/USA_CARTOON_NETWORK/index.m3u8
#EXTINF:-1 tvg-chno="22" tvg-id="WCBS-DT.us_locals1" tvg-name="CBS" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10098_dark_360w_270h.png" group-title="TV",CBS
#EXTINF:-1 tvg-chno="22" tvg-id="CBS.Streaming.SD.East.feed.us2" tvg-name="CBS" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10098_dark_360w_270h.png" group-title="TV",CBS
http://stream.cammonitorplus.net/1810/index.m3u8?token=MnE3ZWg1YkgxdFdWZlo2c2hLMkltWnJhcFo1OHhxcXVyb2pKazZXaWxZRERxNEduaVp1UnBxU2VlWmF0ZnRlRGxaMm1zNStDbnJOOXFZMlhtcStybmc9PQ==
#EXTINF:-1 tvg-chno="23" tvg-id="CBS.News.National.Stream.us2" tvg-name="CBS News 24/7" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s104846_dark_360w_270h.png" group-title="TV",CBS News 24/7
@ -130,7 +130,7 @@ http://hardcoremedia.xyz/live/rabdsbmz/3731346838/129867.ts
http://hardcoremedia.xyz/live/rabdsbmz/3731346838/257087.ts
#EXTINF:-1 tvg-chno="44" tvg-id="Disney.XD.HD.us2" tvg-name="Disney XD" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s18279_dark_360w_270h.png" group-title="TV",Disney XD
http://hardcoremedia.xyz/live/rabdsbmz/3731346838/130092.ts
http://23.237.104.106:8080/USA_DISNEY_XD/index.m3u8
#EXTINF:-1 tvg-chno="45" tvg-id="E!.Entertainment.Television.HD.us2" tvg-name="E! Entertainment" tvg-logo="https://i.gyazo.com/f73b80e3eb56cec06df6705d00e2f422.png" group-title="TV",E! Entertainment
http://23.237.104.106:8080/USA_E/index.m3u8
@ -187,7 +187,7 @@ http://mytvstream.net:8080/live/bn80NG/909467/78599.m3u8
https://jmp2.uk/stvp-IN270000230
#EXTINF:-1 tvg-chno="63" tvg-id="Food.Network.HD.us2" tvg-name="Food Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s44718_dark_360w_270h.png" group-title="TV",Food Network
http://hardcoremedia.xyz/live/rabdsbmz/3731346838/129872.ts
http://23.237.104.106:8080/USA_FOOD_NETWORK/index.m3u8
#EXTINF:-1 tvg-chno="64" tvg-id="WJBK-DT.us_locals1" tvg-name="Fox" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s28719_dark_360w_270h.png" group-title="TV",Fox
http://stream.cammonitorplus.net/1772/index.m3u8?token=MnE3ZWg1YkgxdFdWZlo2c2hLMkltWnJhcFo1OHhxcXVyb2pKazZXaWxZRERxNEduaVp1UnBxU2VlWmF0ZnRlRGxaMm1zNStDbnJOOXFZMlhtcStybmc9PQ==
@ -250,13 +250,13 @@ http://23.237.104.106:8080/USA_HBO/index.m3u8
http://23.237.104.106:8080/USA_HBO2/index.m3u8
#EXTINF:-1 tvg-chno="84" tvg-id="HBO.Comedy.HD.us2" tvg-name="HBO Comedy" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s59839_dark_360w_270h.png" group-title="TV",HBO Comedy
http://hardcoremedia.xyz/live/rabdsbmz/3731346838/129990.ts
http://23.237.104.106:8080/USA_HBO_COMEDY/index.m3u8
#EXTINF:-1 tvg-chno="85" tvg-id="HBO.Drama.us2" tvg-name="HBO Family" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s34879_dark_360w_270h.png" group-title="TV",HBO Family
http://mytvstream.net:8080/live/bn80NG/909467/17772.m3u8
#EXTINF:-1 tvg-chno="86" tvg-id="HBO.Zone.HD.us2" tvg-name="HBO Zone" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s18431_dark_360w_270h.png" group-title="TV",HBO Zone
http://hardcoremedia.xyz/live/rabdsbmz/3731346838/129995.ts
http://23.237.104.106:8080/USA_HBO_ZONE/index.m3u8
#EXTINF:-1 tvg-chno="87" tvg-id="History.HD.us2" tvg-name="History Channel" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s87679_dark_360w_270h.png" group-title="TV",History Channel
http://hardcoremedia.xyz/live/rabdsbmz/3731346838/129892.ts
@ -303,8 +303,8 @@ http://23.237.104.106:8080/USA_NAT_GEO/index.m3u8
#EXTINF:-1 tvg-chno="101" tvg-id="NBA.TV.HD.us2" tvg-name="NBA TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s32281_dark_360w_270h.png" group-title="TV",NBA TV
http://212.102.60.231/NBA_TV/index.m3u8
#EXTINF:-1 tvg-chno="102" tvg-id="WFLA-DT.us_locals1" tvg-name="NBC" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10991_dark_360w_270h.png" group-title="TV",NBC
http://stream.cammonitorplus.net/1842/index.m3u8?token=MnE3ZWg1YkgxdFdWZlo2c2hLMkltWnJhcFo1OHhxcXVyb2pKazZXaWxZRERxNEduaVp1UnBxU2VlWmF0ZnRlRGxaMm1zNStDbnJOOXFZMlhtcStybmc9PQ==
#EXTINF:-1 tvg-chno="102" tvg-id="NBC.East.Stream.us2" tvg-name="NBC" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10991_dark_360w_270h.png" group-title="TV",NBC
http://stream.cammonitorplus.net/1765/index.m3u8?token=MnE3ZWg1YkgxdFdWZlo2c2hLMkltWnJhcFo1OHhxcXVyb2pKazZXaWxZRERxNEduaVp1UnBxU2VlWmF0ZnRlRGxaMm1zNStDbnJOOXFZMlhtcStybmc9PQ==
#EXTINF:-1 tvg-chno="103" tvg-id="NBC.Sports.Bay.Area.HD.us2" tvg-name="NBC Sports Bay Area" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s63138_dark_360w_270h.png" group-title="TV",NBC Sports Bay Area
http://mytvstream.net:8080/live/bn80NG/909467/9900.m3u8
@ -322,7 +322,7 @@ https://starshare.st/live/P4B9TB9xR8/humongous2tonight/1001.ts
http://hardcoremedia.xyz/live/rabdsbmz/3731346838/136477.ts
#EXTINF:-1 tvg-chno="108" tvg-id="New.England.Sports.Network.HD.us2" tvg-name="NESN" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s35038_dark_360w_270h.png" group-title="TV",NESN
http://hardcoremedia.xyz/live/rabdsbmz/3731346838/141484.ts
http://23.237.104.106:8080/USA_NESN/index.m3u8
#EXTINF:-1 tvg-chno="109" tvg-id="NewsNation.us2" tvg-name="NewsNation" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s91096_dark_360w_270h.png" group-title="TV",NewsNation
http://hardcoremedia.xyz/live/rabdsbmz/3731346838/129931.ts
@ -469,10 +469,10 @@ http://hardcoremedia.xyz/live/rabdsbmz/3731346838/129971.ts
http://hardcoremedia.xyz/live/rabdsbmz/3731346838/129973.ts
#EXTINF:-1 tvg-chno="157" tvg-id="VH1.HD.us2" tvg-name="VH1" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s11218_dark_360w_270h.png" group-title="TV",VH1
https://starshare.st/live/P4B9TB9xR8/humongous2tonight/3414.ts
http://23.237.104.106:8080/USA_VH1/index.m3u8
#EXTINF:-1 tvg-chno="158" tvg-id="Vice.HD.us2" tvg-name="Vice TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s18822_dark_360w_270h.png" group-title="TV",Vice TV
http://hardcoremedia.xyz/live/rabdsbmz/3731346838/129976.ts
http://23.237.104.106:8080/USA_VICETV/index.m3u8
#EXTINF:-1 tvg-chno="159" tvg-id="WE.tv.HD.us2" tvg-name="We Tv" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16409_dark_360w_270h.png" group-title="TV",We Tv
http://23.237.104.106:8080/USA_WE_TV/index.m3u8

File diff suppressed because it is too large Load diff

View file

@ -73,7 +73,7 @@ async def main() -> None:
asyncio.create_task(streamcenter.scrape(hdl_brwsr)),
# asyncio.create_task(streamhub.scrape(xtrnl_brwsr)),
asyncio.create_task(streamsgate.scrape(xtrnl_brwsr)),
asyncio.create_task(timstreams.scrape(xtrnl_brwsr)),
# asyncio.create_task(timstreams.scrape(xtrnl_brwsr)),
]
httpx_tasks = [
@ -86,7 +86,7 @@ async def main() -> None:
asyncio.create_task(totalsportek.scrape()),
asyncio.create_task(tvapp.scrape()),
asyncio.create_task(volokit.scrape()),
asyncio.create_task(xstreameast.scrape()),
# asyncio.create_task(xstreameast.scrape()),
asyncio.create_task(webcast.scrape()),
]

View file

@ -97,9 +97,7 @@ async def scrape(browser: Browser) -> None:
log.info(f'Scraping from "{API_URL}"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
async with network.event_context(browser) as context:
@ -142,8 +140,7 @@ async def scrape(browser: Browser) -> None:
urls[key] = cached_urls[key] = entry
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 {len(cached_urls) - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -87,9 +87,7 @@ async def scrape(browser: Browser) -> None:
log.info(f'Scraping from "{BASE_URL}"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
async with network.event_context(browser) as context:
@ -132,8 +130,7 @@ async def scrape(browser: Browser) -> None:
urls[key] = cached_urls[key] = entry
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 {len(cached_urls) - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -99,9 +99,7 @@ async def scrape() -> None:
log.info(f'Scraping from "{BASE_URL}"')
events = await get_events(cached_hrefs)
if events:
if events := await get_events(cached_hrefs):
log.info(f"Processing {len(events)} new URL(s)")
now = Time.clean(Time.now())
@ -143,8 +141,7 @@ async def scrape() -> None:
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -112,9 +112,7 @@ async def scrape() -> None:
log.info(f'Scraping from "{BASE_URL}"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
now = Time.clean(Time.now())
@ -155,8 +153,7 @@ async def scrape() -> None:
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -204,9 +204,7 @@ async def scrape(browser: Browser) -> None:
log.info('Scraping from "https://livetv.sx/enx/"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
async with network.event_context(browser, ignore_https=True) as context:
@ -254,8 +252,7 @@ async def scrape(browser: Browser) -> None:
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -96,9 +96,7 @@ async def scrape() -> None:
log.info(f'Scraping from "{BASE_URL}"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
now = Time.clean(Time.now())
@ -139,8 +137,7 @@ async def scrape() -> None:
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -99,9 +99,7 @@ async def scrape() -> None:
log.info(f'Scraping from "{BASE_URL}"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
now = Time.clean(Time.now())
@ -142,8 +140,7 @@ async def scrape() -> None:
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -97,6 +97,6 @@ async def scrape(browser: Browser) -> None:
urls.update(events or {})
CACHE_FILE.write(urls)
log.info(f"Collected and cached {len(urls)} new event(s)")
CACHE_FILE.write(urls)

View file

@ -106,9 +106,7 @@ async def scrape(browser: Browser) -> None:
log.info(f'Scraping from "{api_url}"')
events = await get_events(api_url, cached_urls.keys())
if events:
if events := await get_events(api_url, cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
async with network.event_context(browser, stealth=False) as context:
@ -159,8 +157,7 @@ async def scrape(browser: Browser) -> None:
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -199,9 +199,7 @@ async def scrape(browser: Browser) -> None:
log.info(f'Scraping from "{BASE_URL}"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
async with network.event_context(browser) as context:
@ -247,8 +245,7 @@ async def scrape(browser: Browser) -> None:
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -124,9 +124,7 @@ async def scrape() -> None:
log.info(f'Scraping from "{BASE_URL}"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
for i, ev in enumerate(events, start=1):
@ -165,8 +163,7 @@ async def scrape() -> None:
urls[key] = cached_urls[key] = entry
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 {len(cached_urls) - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -99,9 +99,7 @@ async def scrape(browser: Browser) -> None:
log.info(f'Scraping from "{BASE_URL}"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
now = Time.clean(Time.now())
@ -142,8 +140,7 @@ async def scrape(browser: Browser) -> None:
urls[key] = cached_urls[key] = entry
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 {len(cached_urls) - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -103,9 +103,7 @@ async def scrape() -> None:
log.info(f'Scraping from "{BASE_URL}"')
events = await get_events()
if events:
if events := await get_events():
log.info(f"Processing {len(events)} new URL(s)")
now = Time.clean(Time.now())

View file

@ -102,9 +102,7 @@ async def scrape(browser: Browser) -> None:
log.info('Scraping from "https://streamcenter.xyz"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
async with network.event_context(browser) as context:
@ -153,8 +151,7 @@ async def scrape(browser: Browser) -> None:
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -143,9 +143,7 @@ async def scrape(browser: Browser) -> None:
log.info(f'Scraping from "{BASE_URL}"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
async with network.event_context(browser, stealth=False) as context:
@ -194,8 +192,7 @@ async def scrape(browser: Browser) -> None:
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -133,9 +133,7 @@ async def scrape(browser: Browser) -> None:
log.info(f'Scraping from "{BASE_URL}"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
async with network.event_context(browser, stealth=False) as context:
@ -184,8 +182,7 @@ async def scrape(browser: Browser) -> None:
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -117,9 +117,7 @@ async def scrape(browser: Browser) -> None:
log.info(f'Scraping from "{BASE_URL}"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
async with network.event_context(browser, stealth=False) as context:
@ -168,8 +166,7 @@ async def scrape(browser: Browser) -> None:
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -145,9 +145,7 @@ async def scrape() -> None:
log.info(f'Scraping from "{BASE_URL}"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
now = Time.clean(Time.now())
@ -188,8 +186,7 @@ async def scrape() -> None:
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -85,9 +85,7 @@ async def scrape() -> None:
log.info(f'Scraping from "{BASE_URL}"')
events = await get_events()
if events:
if events := await get_events():
log.info(f"Processing {len(events)} new URL(s)")
now = Time.clean(Time.now())

View file

@ -115,8 +115,13 @@ class Network:
return
@staticmethod
@cache
@staticmethod
def stealth_js() -> str:
return (Path(__file__).parent / "stealth.js").read_text(encoding="utf-8")
@cache
@staticmethod
def blocked_domains() -> list[str]:
return (
(Path(__file__).parent / "easylist.txt")
@ -172,7 +177,7 @@ class Network:
),
)
await context.add_init_script(path=Path(__file__).parent / "stealth.js")
await context.add_init_script(script=Network.stealth_js())
await context.route("**/*", Network._adblock)

View file

@ -124,9 +124,7 @@ async def scrape() -> None:
log.info(f'Scraping from "{BASE_URL}"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
now = Time.clean(Time.now())
@ -167,8 +165,7 @@ async def scrape() -> None:
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -250,9 +250,7 @@ async def scrape(browser: Browser) -> None:
log.info(f'Scraping from "{base_url}"')
events = await get_events(base_url, cached_urls.keys())
if events:
if events := await get_events(base_url, cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
async with network.event_context(browser, stealth=False) as context:
@ -302,8 +300,7 @@ async def scrape(browser: Browser) -> None:
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -124,9 +124,7 @@ async def scrape() -> None:
log.info(f'Scraping from "{' & '.join(BASE_URLS.values())}"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
now = Time.clean(Time.now())
@ -167,8 +165,7 @@ async def scrape() -> None:
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -133,9 +133,7 @@ async def scrape() -> None:
log.info(f'Scraping from "{BASE_URL}"')
events = await get_events(cached_urls.keys())
if events:
if events := await get_events(cached_urls.keys()):
log.info(f"Processing {len(events)} new URL(s)")
now = Time.clean(Time.now())
@ -176,8 +174,7 @@ async def scrape() -> None:
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
else:
log.info("No new events found")

View file

@ -1,14 +1,12 @@
## Base Log @ 2026-03-01 08:53 UTC
## Base Log @ 2026-03-02 09:06 UTC
### ✅ Working Streams: 156<br>❌ Dead Streams: 5
### ✅ Working Streams: 158<br>❌ Dead Streams: 3
| Channel | Error (Code) | Link |
| ------- | ------------ | ---- |
| Disney XD | HTTP Error (000) | `http://hardcoremedia.xyz/live/rabdsbmz/3731346838/130092.ts` |
| Disney | HTTP Error (000) | `http://hardcoremedia.xyz/live/rabdsbmz/3731346838/257087.ts` |
| FYI TV | HTTP Error (000) | `http://hardcoremedia.xyz/live/rabdsbmz/3731346838/130105.ts` |
| CMT | HTTP Error (404) | `http://23.237.104.106:8080/USA_CMT/index.m3u8` |
| Golf Channel | HTTP Error (000) | `http://hardcoremedia.xyz/live/rabdsbmz/3731346838/258721.ts` |
| NBC Sports NOW | HTTP Error (403) | `https://starshare.st/live/P4B9TB9xR8/humongous2tonight/1001.ts` |
| NBC Sports California | HTTP Error (403) | `http://hardcoremedia.xyz/live/rabdsbmz/3731346838/136474.ts` |
---
#### Base Channels URL
```