Compare commits

..

No commits in common. "b9b5681a28dce278062fb308eb098bd13d1db494" and "51cf61bdb7ff4ded8df885decd93a3b446fbefd2" have entirely different histories.

7 changed files with 90468 additions and 95412 deletions

180537
EPG/TV.xml

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -133,43 +133,43 @@ http://fl1.moveonjoy.com/ESPN_NEWS/index.m3u8
http://fl1.moveonjoy.com/ESPN_U/index.m3u8 http://fl1.moveonjoy.com/ESPN_U/index.m3u8
#EXTINF:-1 tvg-chno="45" tvg-id="ESPN2.HD.us2" tvg-name="ESPN2" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s12444_dark_360w_270h.png" group-title="TV",ESPN2 #EXTINF:-1 tvg-chno="45" tvg-id="ESPN2.HD.us2" tvg-name="ESPN2" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s12444_dark_360w_270h.png" group-title="TV",ESPN2
http://mytvstream.net:8080/live/A1Jay5/362586/2210.m3u8 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/257104
#EXTINF:-1 tvg-chno="46" tvg-id="FanDuel.Sports.Network.Detroit.24/7.HDTV.us" tvg-name="FDSN Detroit" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s54286_dark_360w_270h.png" group-title="TV",FDSN Detroit #EXTINF:-1 tvg-chno="46" tvg-id="FanDuel.Sports.Network.Detroit.24/7.HDTV.us" tvg-name="FDSN Detroit" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s54286_dark_360w_270h.png" group-title="TV",FDSN Detroit
http://mytvstream.net:8080/live/A1Jay5/362586/20930.m3u8 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254459
#EXTINF:-1 tvg-chno="47" tvg-id="FanDuel.Sports.Network.Florida.HDTV.(Out.of.Market).us" tvg-name="FDSN Florida" tvg-logo="https://i.gyazo.com/fad701fbaaafe161b13b23ed9b50179b.png" group-title="TV",FDSN Florida #EXTINF:-1 tvg-chno="47" tvg-id="FanDuel.Sports.Network.Florida.HDTV.(Out.of.Market).us" tvg-name="FDSN Florida" tvg-logo="https://i.gyazo.com/fad701fbaaafe161b13b23ed9b50179b.png" group-title="TV",FDSN Florida
http://mytvstream.net:8080/live/A1Jay5/362586/46794.m3u8 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254460
#EXTINF:-1 tvg-chno="48" tvg-id="FanDuel.Sports.Network.Midwest.24/7.HDTV.us" tvg-name="FDSN Midwest" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s11058_dark_360w_270h.png" group-title="TV",FDSN Midwest #EXTINF:-1 tvg-chno="48" tvg-id="FanDuel.Sports.Network.Midwest.24/7.HDTV.us" tvg-name="FDSN Midwest" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s11058_dark_360w_270h.png" group-title="TV",FDSN Midwest
http://mytvstream.net:8080/live/A1Jay5/362586/66795.m3u8 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254462
#EXTINF:-1 tvg-chno="49" tvg-id="FanDuel.Sports.Network.North.HDTV.us" tvg-name="FDSN North" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10977_dark_360w_270h.png" group-title="TV",FDSN North #EXTINF:-1 tvg-chno="49" tvg-id="FanDuel.Sports.Network.North.HDTV.us" tvg-name="FDSN North" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10977_dark_360w_270h.png" group-title="TV",FDSN North
http://mytvstream.net:8080/live/A1Jay5/362586/58827.m3u8 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254463
#EXTINF:-1 tvg-chno="50" tvg-id="FanDuel.Sports.Network.Ohio.(Cleveland).HDTV.us" tvg-name="FDSN Ohio" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s49691_dark_360w_270h.png" group-title="TV",FDSN Ohio #EXTINF:-1 tvg-chno="50" tvg-id="FanDuel.Sports.Network.Ohio.(Cleveland).HDTV.us" tvg-name="FDSN Ohio" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s49691_dark_360w_270h.png" group-title="TV",FDSN Ohio
http://mytvstream.net:8080/live/A1Jay5/362586/17752.m3u8 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254464
#EXTINF:-1 tvg-chno="51" tvg-id="FanDuel.Sports.Network.Oklahoma.24/7.HDTV.(Tulsa).us" tvg-name="FDSN Oklahoma" tvg-logo="https://i.gyazo.com/80ad6fd142cd67f06eef58d9ce5aa72b.png" group-title="TV",FDSN Oklahoma #EXTINF:-1 tvg-chno="51" tvg-id="FanDuel.Sports.Network.Oklahoma.24/7.HDTV.(Tulsa).us" tvg-name="FDSN Oklahoma" tvg-logo="https://i.gyazo.com/80ad6fd142cd67f06eef58d9ce5aa72b.png" group-title="TV",FDSN Oklahoma
http://mytvstream.net:8080/live/A1Jay5/362586/20934.m3u8 http://mytvstream.net:8080/live/A1Jay5/362586/20934.m3u8
#EXTINF:-1 tvg-chno="52" tvg-id="FanDuel.Sports.Network.SoCal.HDTV.us" tvg-name="FDSN SoCal" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16743_dark_360w_270h.png" group-title="TV",FDSN SoCal #EXTINF:-1 tvg-chno="52" tvg-id="FanDuel.Sports.Network.SoCal.HDTV.us" tvg-name="FDSN SoCal" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16743_dark_360w_270h.png" group-title="TV",FDSN SoCal
http://mytvstream.net:8080/live/A1Jay5/362586/221151.m3u8 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254465
#EXTINF:-1 tvg-chno="53" tvg-id="FanDuel.Sports.Network.Southeast.HDTV.(Mont./Birm./Dothan/Mobile.AL).us" tvg-name="FDSN Southeast" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s20789_dark_360w_270h.png" group-title="TV",FDSN Southeast #EXTINF:-1 tvg-chno="53" tvg-id="FanDuel.Sports.Network.Southeast.HDTV.(Mont./Birm./Dothan/Mobile.AL).us" tvg-name="FDSN Southeast" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s20789_dark_360w_270h.png" group-title="TV",FDSN Southeast
http://mytvstream.net:8080/live/A1Jay5/362586/2213.m3u8 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254466
#EXTINF:-1 tvg-chno="54" tvg-id="FanDuel.Sports.Network.Southwest.HDTV.24/7.(Main).us" tvg-name="FDSN Southwest" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s59629_dark_360w_270h.png" group-title="TV",FDSN Southwest #EXTINF:-1 tvg-chno="54" tvg-id="FanDuel.Sports.Network.Southwest.HDTV.24/7.(Main).us" tvg-name="FDSN Southwest" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s59629_dark_360w_270h.png" group-title="TV",FDSN Southwest
http://mytvstream.net:8080/live/A1Jay5/362586/21843.m3u8 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254469
#EXTINF:-1 tvg-chno="55" tvg-id="FanDuel.Sports.Network.Sun.South.24/7.HDTV.(South.Marlins,.Rays,.Heat).us" tvg-name="FDSN Sun" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s61084_dark_360w_270h.png" group-title="TV",FDSN Sun #EXTINF:-1 tvg-chno="55" tvg-id="FanDuel.Sports.Network.Sun.South.24/7.HDTV.(South.Marlins,.Rays,.Heat).us" tvg-name="FDSN Sun" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s61084_dark_360w_270h.png" group-title="TV",FDSN Sun
http://mytvstream.net:8080/live/A1Jay5/362586/104917.m3u8 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254467
#EXTINF:-1 tvg-chno="56" tvg-id="FanDuel.Sports.Network.West.HDTV.us" tvg-name="FDSN West" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s59627_dark_360w_270h.png" group-title="TV",FDSN West #EXTINF:-1 tvg-chno="56" tvg-id="FanDuel.Sports.Network.West.HDTV.us" tvg-name="FDSN West" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s59627_dark_360w_270h.png" group-title="TV",FDSN West
http://mytvstream.net:8080/live/A1Jay5/362586/20932.m3u8 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254471
#EXTINF:-1 tvg-chno="57" tvg-id="FanDuel.Sports.Network.Wisconsin.24/7.HDTV.us" tvg-name="FDSN Wisconsin" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16348_dark_360w_270h.png" group-title="TV",FDSN Wisconsin #EXTINF:-1 tvg-chno="57" tvg-id="FanDuel.Sports.Network.Wisconsin.24/7.HDTV.us" tvg-name="FDSN Wisconsin" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16348_dark_360w_270h.png" group-title="TV",FDSN Wisconsin
http://mytvstream.net:8080/live/A1Jay5/362586/78599.m3u8 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254470
#EXTINF:-1 tvg-chno="58" tvg-id="plex.tv.FIFA+.plex" tvg-name="FIFA+ TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s136235_dark_360w_270h.png" group-title="TV",FIFA+ TV #EXTINF:-1 tvg-chno="58" tvg-id="plex.tv.FIFA+.plex" tvg-name="FIFA+ TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s136235_dark_360w_270h.png" group-title="TV",FIFA+ TV
https://jmp2.uk/stvp-IN270000230 https://jmp2.uk/stvp-IN270000230
@ -295,10 +295,10 @@ https://fl1.moveonjoy.com/FL_Tampa_NBC/index.m3u8
http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/257216 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/257216
#EXTINF:-1 tvg-chno="99" tvg-id="NBC.Sports.Boston.HD.us2" tvg-name="NBC Sports Boston" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s49198_dark_360w_270h.png" group-title="TV",NBC Sports Boston #EXTINF:-1 tvg-chno="99" tvg-id="NBC.Sports.Boston.HD.us2" tvg-name="NBC Sports Boston" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s49198_dark_360w_270h.png" group-title="TV",NBC Sports Boston
http://mytvstream.net:8080/live/A1Jay5/362586/20939.m3u8 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/257204
#EXTINF:-1 tvg-chno="100" tvg-id="NBC.Sports.California.SAT.us2" tvg-name="NBC Sports California" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s45540_dark_360w_270h.png" group-title="TV",NBC Sports California #EXTINF:-1 tvg-chno="100" tvg-id="NBC.Sports.California.SAT.us2" tvg-name="NBC Sports California" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s45540_dark_360w_270h.png" group-title="TV",NBC Sports California
http://mytvstream.net:8080/live/A1Jay5/362586/20940.m3u8 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/257217
#EXTINF:-1 tvg-chno="101" tvg-id="a90a91570ce0536cbb22b591ad7e0da2" tvg-name="NBC Sports NOW" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s114140_dark_360w_270h.png" group-title="TV",NBC Sports NOW #EXTINF:-1 tvg-chno="101" tvg-id="a90a91570ce0536cbb22b591ad7e0da2" tvg-name="NBC Sports NOW" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s114140_dark_360w_270h.png" group-title="TV",NBC Sports NOW
https://jmp2.uk/rok-a90a91570ce0536cbb22b591ad7e0da2.m3u8 https://jmp2.uk/rok-a90a91570ce0536cbb22b591ad7e0da2.m3u8
@ -307,7 +307,7 @@ https://jmp2.uk/rok-a90a91570ce0536cbb22b591ad7e0da2.m3u8
http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/136477 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/136477
#EXTINF:-1 tvg-chno="103" 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 #EXTINF:-1 tvg-chno="103" 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://mytvstream.net:8080/live/A1Jay5/362586/46726.m3u8 http://hardcoremedia.xyz/MZJC2ajcBk/tpbusggzm3/261656
#EXTINF:-1 tvg-chno="104" 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 #EXTINF:-1 tvg-chno="104" 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://fl1.moveonjoy.com/NEWS_NATION/index.m3u8 http://fl1.moveonjoy.com/NEWS_NATION/index.m3u8
@ -364,7 +364,7 @@ http://fl1.moveonjoy.com/SMITHSONIAN_CHANNEL/index.m3u8
http://fl1.moveonjoy.com/Sony_Movie_Channel/index.m3u8 http://fl1.moveonjoy.com/Sony_Movie_Channel/index.m3u8
#EXTINF:-1 tvg-chno="122" tvg-id="Space.City.Home.Network.HD.us2" tvg-name="Space City Home Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s77744_dark_360w_270h.png" group-title="TV",Space City Home Network #EXTINF:-1 tvg-chno="122" tvg-id="Space.City.Home.Network.HD.us2" tvg-name="Space City Home Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s77744_dark_360w_270h.png" group-title="TV",Space City Home Network
http://mytvstream.net:8080/live/A1Jay5/362586/213668.m3u8 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/257248
#EXTINF:-1 tvg-chno="123" tvg-id="Spectrum.SportsNet.LA.Dodgers.HD.us2" tvg-name="Spectrum SportsNet LA Dodgers" tvg-logo="https://i.gyazo.com/765cce528ddda366695bb178d9dee6da.png" group-title="TV",Spectrum SportsNet LA Dodgers #EXTINF:-1 tvg-chno="123" tvg-id="Spectrum.SportsNet.LA.Dodgers.HD.us2" tvg-name="Spectrum SportsNet LA Dodgers" tvg-logo="https://i.gyazo.com/765cce528ddda366695bb178d9dee6da.png" group-title="TV",Spectrum SportsNet LA Dodgers
http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/141497 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/141497
@ -403,7 +403,7 @@ https://turnerlive.warnermediacdn.com/hls/live/2023172/tbseast/slate/VIDEO_0_356
https://fl1.moveonjoy.com/TENNIS_CHANNEL/index.m3u8 https://fl1.moveonjoy.com/TENNIS_CHANNEL/index.m3u8
#EXTINF:-1 tvg-chno="135" tvg-id="The.Weather.Channel.HD.us2" tvg-name="The Weather Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s58812_dark_360w_270h.png" group-title="TV",The Weather Channel #EXTINF:-1 tvg-chno="135" tvg-id="The.Weather.Channel.HD.us2" tvg-name="The Weather Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s58812_dark_360w_270h.png" group-title="TV",The Weather Channel
http://mytvstream.net:8080/live/A1Jay5/362586/18926.m3u8 http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/257329
#EXTINF:-1 tvg-chno="136" tvg-id="TLC.HD.(US).us2" tvg-name="TLC" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s11158_dark_360w_270h.png" group-title="TV",TLC #EXTINF:-1 tvg-chno="136" tvg-id="TLC.HD.(US).us2" tvg-name="TLC" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s11158_dark_360w_270h.png" group-title="TV",TLC
http://fl1.moveonjoy.com/TLC/index.m3u8 http://fl1.moveonjoy.com/TLC/index.m3u8

File diff suppressed because it is too large Load diff

View file

@ -14,79 +14,52 @@ TAG = "TOTALSPRTK"
CACHE_FILE = Cache(f"{TAG.lower()}.json", exp=28_800) CACHE_FILE = Cache(f"{TAG.lower()}.json", exp=28_800)
MIRRORS = [ BASE_URL = "https://live.totalsportek777.com/"
{
"base": "https://live.totalsportek777.com/",
"hex_decode": True,
},
{
"base": "https://live2.totalsportek777.com/",
"hex_decode": False,
},
]
def fix_league(s: str) -> str: def fix_league(s: str) -> str:
return s.upper() if s.islower() else s return s.upper() if s.islower() else s
async def process_event(href: str, url_num: int) -> tuple[str | None, str | None]: async def process_event(url: str, url_num: int) -> tuple[str | None, str | None]:
valid_m3u8 = re.compile(r'var\s+(\w+)\s*=\s*"([^"]*)"', re.IGNORECASE)
for x, mirror in enumerate(MIRRORS, start=1):
base = mirror["base"]
hex_decode = mirror["hex_decode"]
url = urljoin(base, href)
if not (html_data := await network.request(url, log=log)): if not (html_data := await network.request(url, log=log)):
log.info(f"M{x} | URL {url_num}) Failed to load url.") log.info(f"URL {url_num}) Failed to load url.")
return None, None return None, None
soup = HTMLParser(html_data.content) soup = HTMLParser(html_data.content)
iframe = soup.css_first("iframe") if not (iframe := soup.css_first("iframe")):
log.warning(f"URL {url_num}) No iframe element found.")
if not iframe or not (iframe_src := iframe.attributes.get("src")): return None, None
log.warning(f"M{x} | URL {url_num}) No iframe element found.")
continue if not (iframe_src := iframe.attributes.get("src")):
log.warning(f"URL {url_num}) No valid iframe source found.")
return None, None
if not (iframe_src_data := await network.request(iframe_src, log=log)): if not (iframe_src_data := await network.request(iframe_src, log=log)):
log.warning(f"M{x} | URL {url_num}) Failed to load iframe source.") log.info(f"URL {url_num}) Failed to load iframe source.")
continue
return None, None
valid_m3u8 = re.compile(r'var\s+(\w+)\s*=\s*"([^"]*)"', re.IGNORECASE)
if not (match := valid_m3u8.search(iframe_src_data.text)): if not (match := valid_m3u8.search(iframe_src_data.text)):
log.warning(f"M{x} | URL {url_num}) No Clappr source found.") log.warning(f"URL {url_num}) No Clappr source found.")
continue
raw = match[2]
try:
m3u8_url = bytes.fromhex(raw).decode("utf-8") if hex_decode else raw
except Exception as e:
log.warning(f"M{x} | URL {url_num}) Decoding failed: {e}")
continue
if m3u8_url and iframe_src:
log.info(f"M{x} | URL {url_num}) Captured M3U8")
return m3u8_url, iframe_src
else:
log.warning(f"M{x} | URL {url_num}) No M3U8 found")
return None, None return None, None
return None, None log.info(f"URL {url_num}) Captured M3U8")
return bytes.fromhex(match[2]).decode("utf-8"), iframe_src
async def get_events(url: str, cached_keys: list[str]) -> list[dict[str, str]]: async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
events = [] events = []
if not (html_data := await network.request(url, log=log)): if not (html_data := await network.request(BASE_URL, log=log)):
return events return events
soup = HTMLParser(html_data.content) soup = HTMLParser(html_data.content)
@ -125,7 +98,7 @@ async def get_events(url: str, cached_keys: list[str]) -> list[dict[str, str]]:
{ {
"sport": sport, "sport": sport,
"event": event_name, "event": event_name,
"href": href, "link": urljoin(BASE_URL, href),
} }
) )
@ -143,14 +116,9 @@ async def scrape() -> None:
log.info(f"Loaded {cached_count} event(s) from cache") log.info(f"Loaded {cached_count} event(s) from cache")
if not (base_url := await network.get_base([mirr["base"] for mirr in MIRRORS])): log.info(f'Scraping from "{BASE_URL}"')
log.warning("No working TotalSportek mirrors")
CACHE_FILE.write(cached_urls) events = await get_events(cached_urls.keys())
return
events = await get_events(base_url, cached_urls.keys())
log.info(f"Processing {len(events)} new URL(s)") log.info(f"Processing {len(events)} new URL(s)")
@ -160,7 +128,7 @@ async def scrape() -> None:
for i, ev in enumerate(events, start=1): for i, ev in enumerate(events, start=1):
handler = partial( handler = partial(
process_event, process_event,
href=ev["href"], url=ev["link"],
url_num=i, url_num=i,
) )
@ -171,10 +139,10 @@ async def scrape() -> None:
log=log, log=log,
) )
sport, event, href = ( sport, event, link = (
ev["sport"], ev["sport"],
ev["event"], ev["event"],
ev["href"], ev["link"],
) )
key = f"[{sport}] {event} ({TAG})" key = f"[{sport}] {event} ({TAG})"
@ -187,7 +155,7 @@ async def scrape() -> None:
"base": iframe, "base": iframe,
"timestamp": now.timestamp(), "timestamp": now.timestamp(),
"id": tvg_id or "Live.Event.us", "id": tvg_id or "Live.Event.us",
"href": href, "link": link,
} }
cached_urls[key] = entry cached_urls[key] = entry

View file

@ -239,7 +239,8 @@ class Network:
}, },
) )
await context.add_init_script(""" await context.add_init_script(
"""
Object.defineProperty(navigator, "webdriver", { get: () => undefined }); Object.defineProperty(navigator, "webdriver", { get: () => undefined });
Object.defineProperty(navigator, "languages", { Object.defineProperty(navigator, "languages", {
@ -288,7 +289,8 @@ class Network:
observer.observe(document.documentElement, { childList: true, subtree: true }); observer.observe(document.documentElement, { childList: true, subtree: true });
""") """
)
return brwsr, context return brwsr, context

View file

@ -1,10 +1,17 @@
## Base Log @ 2026-01-19 20:43 UTC ## Base Log @ 2026-01-18 20:42 UTC
### ✅ Working Streams: 144<br>❌ Dead Streams: 1 ### ✅ Working Streams: 137<br>❌ Dead Streams: 8
| Channel | Error (Code) | Link | | Channel | Error (Code) | Link |
| ------- | ------------ | ---- | | ------- | ------------ | ---- |
| Premier Sports 2 | Unknown status (302) | `http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/117038` | | ESPN2 | HTTP Error (502) | `http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/257104` |
| FDSN Detroit | HTTP Error (502) | `http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254459` |
| FDSN Florida | Unknown status (302) | `http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254460` |
| FDSN Midwest | HTTP Error (502) | `http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254462` |
| FDSN North | Unknown status (302) | `http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254463` |
| NBC Sports Boston | Unknown status (302) | `http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/257204` |
| NBC Sports California | Unknown status (302) | `http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/257217` |
| Space City Home Network | Unknown status (302) | `http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/257248` |
--- ---
#### Base Channels URL #### Base Channels URL
``` ```