Compare commits

...

34 commits

Author SHA1 Message Date
GitHub Actions Bot
b9b5681a28 update M3U8 2026-01-19 21:31:24 -05:00
GitHub Actions Bot
90bab355f9 update M3U8 2026-01-19 21:02:08 -05:00
GitHub Actions Bot
d8731fd1a0 update M3U8 2026-01-19 20:33:22 -05:00
GitHub Actions Bot
a75a1b44ba update M3U8 2026-01-19 20:02:41 -05:00
GitHub Actions Bot
baa1bf8c55 update M3U8 2026-01-19 19:34:29 -05:00
GitHub Actions Bot
4def0edf6a update M3U8 2026-01-19 19:04:26 -05:00
GitHub Actions Bot
4093d23911 update M3U8 2026-01-19 18:31:18 -05:00
GitHub Actions Bot
ad20c63de3 update M3U8 2026-01-19 18:02:02 -05:00
GitHub Actions Bot
153ef685ae update M3U8 2026-01-19 17:31:48 -05:00
GitHub Actions Bot
2f6af92dd6 update M3U8 2026-01-19 17:01:45 -05:00
doms9
00000d9e26 e
add mirrors for totalsportek.py
2026-01-19 16:52:57 -05:00
GitHub Actions Bot
ab88683670 update M3U8 2026-01-19 16:31:15 -05:00
GitHub Actions Bot
16e480ff4b update M3U8 2026-01-19 16:01:21 -05:00
GitHub Actions Bot
b2809106fe health log 2026-01-19 20:43:31 +00:00
GitHub Actions Bot
bc06cc52d9 update M3U8 2026-01-19 15:31:01 -05:00
GitHub Actions Bot
50d5195de4 update M3U8 2026-01-19 15:02:11 -05:00
GitHub Actions Bot
0b1f1e5772 update M3U8 2026-01-19 14:32:15 -05:00
GitHub Actions Bot
aa8cbb95cb update M3U8 2026-01-19 14:02:30 -05:00
GitHub Actions Bot
5a6aa41aa7 update EPG 2026-01-19 19:00:08 +00:00
GitHub Actions Bot
1c6978b856 update M3U8 2026-01-19 13:31:58 -05:00
GitHub Actions Bot
dc7728b5dc update M3U8 2026-01-19 13:02:50 -05:00
GitHub Actions Bot
8e84ea2e6f update M3U8 2026-01-19 12:02:12 -05:00
GitHub Actions Bot
080c4317f1 update M3U8 2026-01-19 11:01:53 -05:00
GitHub Actions Bot
7d9a823f4a update M3U8 2026-01-19 10:01:04 -05:00
GitHub Actions Bot
0a9e12dd89 health log 2026-01-19 14:52:40 +00:00
GitHub Actions Bot
cda9ce8d8b update M3U8 2026-01-19 09:01:58 -05:00
GitHub Actions Bot
73202c4349 update M3U8 2026-01-19 08:02:04 -05:00
GitHub Actions Bot
d9f82ca995 update EPG 2026-01-19 10:58:59 +00:00
GitHub Actions Bot
829eef555f health log 2026-01-19 08:56:04 +00:00
GitHub Actions Bot
f16acb0055 update M3U8 2026-01-18 23:31:06 -05:00
GitHub Actions Bot
861fd29491 update EPG 2026-01-19 04:05:19 +00:00
GitHub Actions Bot
e91a4eb902 update M3U8 2026-01-18 23:00:13 -05:00
GitHub Actions Bot
30bf0901e6 update M3U8 2026-01-18 22:31:51 -05:00
GitHub Actions Bot
c8676d1812 update M3U8 2026-01-18 22:02:10 -05:00
7 changed files with 95008 additions and 90064 deletions

179937
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
#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://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/257104
http://mytvstream.net:8080/live/A1Jay5/362586/2210.m3u8
#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://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254459
http://mytvstream.net:8080/live/A1Jay5/362586/20930.m3u8
#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://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254460
http://mytvstream.net:8080/live/A1Jay5/362586/46794.m3u8
#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://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254462
http://mytvstream.net:8080/live/A1Jay5/362586/66795.m3u8
#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://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254463
http://mytvstream.net:8080/live/A1Jay5/362586/58827.m3u8
#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://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254464
http://mytvstream.net:8080/live/A1Jay5/362586/17752.m3u8
#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
#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://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254465
http://mytvstream.net:8080/live/A1Jay5/362586/221151.m3u8
#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://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254466
http://mytvstream.net:8080/live/A1Jay5/362586/2213.m3u8
#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://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254469
http://mytvstream.net:8080/live/A1Jay5/362586/21843.m3u8
#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://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254467
http://mytvstream.net:8080/live/A1Jay5/362586/104917.m3u8
#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://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254471
http://mytvstream.net:8080/live/A1Jay5/362586/20932.m3u8
#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://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/254470
http://mytvstream.net:8080/live/A1Jay5/362586/78599.m3u8
#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
@ -295,10 +295,10 @@ https://fl1.moveonjoy.com/FL_Tampa_NBC/index.m3u8
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
http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/257204
http://mytvstream.net:8080/live/A1Jay5/362586/20939.m3u8
#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://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/257217
http://mytvstream.net:8080/live/A1Jay5/362586/20940.m3u8
#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
@ -307,7 +307,7 @@ https://jmp2.uk/rok-a90a91570ce0536cbb22b591ad7e0da2.m3u8
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
http://hardcoremedia.xyz/MZJC2ajcBk/tpbusggzm3/261656
http://mytvstream.net:8080/live/A1Jay5/362586/46726.m3u8
#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
@ -364,7 +364,7 @@ http://fl1.moveonjoy.com/SMITHSONIAN_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
http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/257248
http://mytvstream.net:8080/live/A1Jay5/362586/213668.m3u8
#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
@ -403,7 +403,7 @@ https://turnerlive.warnermediacdn.com/hls/live/2023172/tbseast/slate/VIDEO_0_356
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
http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/257329
http://mytvstream.net:8080/live/A1Jay5/362586/18926.m3u8
#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

File diff suppressed because it is too large Load diff

View file

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

View file

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

View file

@ -1,17 +1,10 @@
## Base Log @ 2026-01-18 20:42 UTC
## Base Log @ 2026-01-19 20:43 UTC
### ✅ Working Streams: 137<br>❌ Dead Streams: 8
### ✅ Working Streams: 144<br>❌ Dead Streams: 1
| Channel | Error (Code) | Link |
| ------- | ------------ | ---- |
| 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` |
| Premier Sports 2 | Unknown status (302) | `http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/117038` |
---
#### Base Channels URL
```