Compare commits

..

No commits in common. "aa49f7f572c0c8cc251713553a06e819f34bf3b7" and "078263e046975329cb04599c679601a288b1c6da" have entirely different histories.

9 changed files with 94074 additions and 93139 deletions

182286
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

@ -37,7 +37,7 @@ http://fl1.moveonjoy.com/BBC_WORLD_NEWS/index.m3u8
https://streamer1.nexgen.bz/BET/index.m3u8 https://streamer1.nexgen.bz/BET/index.m3u8
#EXTINF:-1 tvg-chno="13" tvg-id="Big.Ten.Network.HD.us2" tvg-name="Big Ten Network" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s56783_dark_360w_270h.png" group-title="TV",Big Ten Network #EXTINF:-1 tvg-chno="13" tvg-id="Big.Ten.Network.HD.us2" tvg-name="Big Ten Network" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s56783_dark_360w_270h.png" group-title="TV",Big Ten Network
http://23.237.104.106:8080/USA_BTN/index.m3u8 http://fl1.moveonjoy.com/BIG_TEN_NETWORK/index.m3u8
#EXTINF:-1 tvg-chno="14" 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 #EXTINF:-1 tvg-chno="14" 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 https://live-manifest.production-public.tubi.io/live/a5aabf5a-9615-4987-8163-18edfa1360c6/playlist.m3u8
@ -199,7 +199,7 @@ http://cord-cutter.net:8080/30550113/30550113/1847
http://fl1.moveonjoy.com/FREE_FORM/index.m3u8 http://fl1.moveonjoy.com/FREE_FORM/index.m3u8
#EXTINF:-1 tvg-chno="67" tvg-id="Fuse.HD.us2" tvg-name="FUSE" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s14929_dark_360w_270h.png" group-title="TV",FUSE #EXTINF:-1 tvg-chno="67" tvg-id="Fuse.HD.us2" tvg-name="FUSE" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s14929_dark_360w_270h.png" group-title="TV",FUSE
http://23.237.104.106:8080/USA_FUSE/index.m3u8 http://fl1.moveonjoy.com/FUSE/index.m3u8
#EXTINF:-1 tvg-chno="68" tvg-id="FX.HD.us2" tvg-name="FX" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s14321_dark_360w_270h.png" group-title="TV",FX #EXTINF:-1 tvg-chno="68" tvg-id="FX.HD.us2" tvg-name="FX" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s14321_dark_360w_270h.png" group-title="TV",FX
http://fl1.moveonjoy.com/FX/index.m3u8 http://fl1.moveonjoy.com/FX/index.m3u8
@ -316,7 +316,7 @@ http://cord-cutter.net:8080/30550113/30550113/31637
http://fl1.moveonjoy.com/NEWS_NATION/index.m3u8 http://fl1.moveonjoy.com/NEWS_NATION/index.m3u8
#EXTINF:-1 tvg-chno="106" tvg-id="NFL.Network.HD.us2" tvg-name="NFL Network" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-states/nfl-network-hz-us.png" group-title="TV",NFL Network #EXTINF:-1 tvg-chno="106" tvg-id="NFL.Network.HD.us2" tvg-name="NFL Network" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-states/nfl-network-hz-us.png" group-title="TV",NFL Network
http://23.237.104.106:8080/USA_NFL_NETWORK/index.m3u8 http://fl1.moveonjoy.com/NFL_NETWORK/index.m3u8
#EXTINF:-1 tvg-chno="107" tvg-id="NFL.RedZone.HD.us2" tvg-name="NFL RedZone" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-states/nfl-red-zone-hz-us.png" group-title="TV",NFL RedZone #EXTINF:-1 tvg-chno="107" tvg-id="NFL.RedZone.HD.us2" tvg-name="NFL RedZone" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-states/nfl-red-zone-hz-us.png" group-title="TV",NFL RedZone
http://cord-cutter.net:8080/30550113/30550113/208830 http://cord-cutter.net:8080/30550113/30550113/208830
@ -352,7 +352,7 @@ http://109.61.81.147:1935/cdn7/1276/video.m3u8?token=c708d1e1b86b0247d95ecf4645d
http://109.61.81.147:1935/cdn7/1275/mpegts?token=0abb07758b53c286d3b6b7943b7c5405 http://109.61.81.147:1935/cdn7/1275/mpegts?token=0abb07758b53c286d3b6b7943b7c5405
#EXTINF:-1 tvg-chno="118" tvg-id="ReelzChannel.HD.us2" tvg-name="Reelz Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s68385_dark_360w_270h.png" group-title="TV",Reelz Channel #EXTINF:-1 tvg-chno="118" tvg-id="ReelzChannel.HD.us2" tvg-name="Reelz Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s68385_dark_360w_270h.png" group-title="TV",Reelz Channel
http://23.237.104.106:8080/USA_REELZ/index.m3u8 http://fl1.moveonjoy.com/REELZ/index.m3u8
#EXTINF:-1 tvg-chno="119" tvg-id="ROOT.Sports.Northwest.HD.us2" tvg-name="Root Sports" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s11062_dark_360w_270h.png" group-title="TV",Root Sports #EXTINF:-1 tvg-chno="119" tvg-id="ROOT.Sports.Northwest.HD.us2" tvg-name="Root Sports" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s11062_dark_360w_270h.png" group-title="TV",Root Sports
http://cord-cutter.net:8080/30550113/30550113/85232 http://cord-cutter.net:8080/30550113/30550113/85232

File diff suppressed because it is too large Load diff

View file

@ -37,8 +37,9 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
API_CACHE.write(api_data) API_CACHE.write(api_data)
events = [] events = []
start_dt = now.delta(minutes=-30) start_dt = now.delta(minutes=-30)
end_dt = now.delta(hours=3) end_dt = now.delta(minutes=30)
for info in api_data.get("days", []): for info in api_data.get("days", []):
for event in info["items"]: for event in info["items"]:

View file

@ -52,8 +52,8 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
events = [] events = []
start_dt = now.delta(hours=-1) start_dt = now.delta(minutes=-30)
end_dt = now.delta(minutes=5) end_dt = now.delta(minutes=10)
for stream_group in api_data: for stream_group in api_data:
category_id: int = stream_group.get("categoryId") category_id: int = stream_group.get("categoryId")

View file

@ -44,7 +44,13 @@ async def get_events() -> dict[str, dict[str, str | float]]:
key = f"[{sport}] {name} ({TAG})" key = f"[{sport}] {name} ({TAG})"
tvg_id, logo = leagues.get_tvg_info(sport, name) logo = (
urljoin(BASE_URL, thumbnail)
if (thumbnail := stream.get("thumbnail_url"))
else None
)
tvg_id, pic = leagues.get_tvg_info(sport, name)
events[key] = { events[key] = {
"url": network.build_proxy_url( "url": network.build_proxy_url(
@ -52,7 +58,7 @@ async def get_events() -> dict[str, dict[str, str | float]]:
path=f"{stream_key}/index.m3u8", path=f"{stream_key}/index.m3u8",
query={"stream_name": name}, query={"stream_name": name},
), ),
"logo": logo, "logo": logo or pic,
"base": BASE_URL, "base": BASE_URL,
"timestamp": now.timestamp(), "timestamp": now.timestamp(),
"id": tvg_id or "Live.Event.us", "id": tvg_id or "Live.Event.us",

View file

@ -14,7 +14,7 @@ TAG = "TOTALSPRTK"
CACHE_FILE = Cache(f"{TAG.lower()}.json", exp=28_800) CACHE_FILE = Cache(f"{TAG.lower()}.json", exp=28_800)
BASE_URL = "https://live2.totalsportek777.com/" BASE_URL = "https://live.totalsportek777.com/"
def fix_league(s: str) -> str: def fix_league(s: str) -> str:
@ -29,12 +29,15 @@ async def process_event(url: str, url_num: int) -> tuple[str | None, str | None]
soup = HTMLParser(html_data.content) soup = HTMLParser(html_data.content)
if not (iframe := soup.css_first(".box iframe")): if not (iframe := soup.css_first("iframe")):
log.warning(f"URL {url_num}) No iframe element found.") log.warning(f"URL {url_num}) No iframe element found.")
return None, None return None, None
if not (iframe_src := iframe.attributes.get("src")): if (
not (iframe_src := iframe.attributes.get("src"))
or "xsportportal" not in iframe_src
):
log.warning(f"URL {url_num}) No valid iframe source found.") log.warning(f"URL {url_num}) No valid iframe source found.")
return None, None return None, None
@ -53,7 +56,7 @@ async def process_event(url: str, url_num: int) -> tuple[str | None, str | None]
log.info(f"URL {url_num}) Captured M3U8") log.info(f"URL {url_num}) Captured M3U8")
return match[2], iframe_src return bytes.fromhex(match[2]).decode("utf-8"), iframe_src
async def get_events(cached_keys: list[str]) -> list[dict[str, str]]: async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:

View file

@ -1,15 +1,12 @@
## Base Log @ 2026-01-09 20:44 UTC ## Base Log @ 2026-01-08 20:44 UTC
### ✅ Working Streams: 142<br>❌ Dead Streams: 6 ### ✅ Working Streams: 145<br>❌ Dead Streams: 3
| Channel | Error (Code) | Link | | Channel | Error (Code) | Link |
| ------- | ------------ | ---- | | ------- | ------------ | ---- |
| C-SPAN | HTTP Error (404) | `http://fl1.moveonjoy.com/C-SPAN/index.m3u8` | | BET | HTTP Error (403) | `https://streamer1.nexgen.bz/BET/index.m3u8` |
| CBS | HTTP Error (404) | `http://fl1.moveonjoy.com/CBSEAST/index.m3u8` | | CBS | HTTP Error (404) | `http://fl1.moveonjoy.com/CBSEAST/index.m3u8` |
| Freeform TV | HTTP Error (404) | `http://fl1.moveonjoy.com/FREE_FORM/index.m3u8` | | NFL Network | HTTP Error (404) | `http://fl1.moveonjoy.com/NFL_NETWORK/index.m3u8` |
| ION TV | HTTP Error (404) | `http://fl1.moveonjoy.com/ION_TV/index.m3u8` |
| Investigation Discovery | HTTP Error (404) | `https://fl1.moveonjoy.com/INVESTIGATION_DISCOVERY/index.m3u8` |
| Premier Sports 2 | HTTP Error (403) | `http://109.61.81.147:1935/cdn7/1275/mpegts?token=0abb07758b53c286d3b6b7943b7c5405` |
--- ---
#### Base Channels URL #### Base Channels URL
``` ```