mirror of
https://github.com/doms9/iptv.git
synced 2026-01-21 03:59:03 +01:00
Compare commits
No commits in common. "aa49f7f572c0c8cc251713553a06e819f34bf3b7" and "078263e046975329cb04599c679601a288b1c6da" have entirely different histories.
aa49f7f572
...
078263e046
9 changed files with 94074 additions and 93139 deletions
182286
EPG/TV.xml
182286
EPG/TV.xml
File diff suppressed because one or more lines are too long
2444
M3U8/TV.m3u8
2444
M3U8/TV.m3u8
File diff suppressed because it is too large
Load diff
|
|
@ -37,7 +37,7 @@ http://fl1.moveonjoy.com/BBC_WORLD_NEWS/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
|
||||
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
|
||||
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
|
||||
|
||||
#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
|
||||
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
|
||||
|
||||
#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
|
||||
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
|
||||
|
||||
#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
|
||||
http://cord-cutter.net:8080/30550113/30550113/85232
|
||||
|
|
|
|||
2436
M3U8/events.m3u8
2436
M3U8/events.m3u8
File diff suppressed because it is too large
Load diff
|
|
@ -37,8 +37,9 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
|
|||
API_CACHE.write(api_data)
|
||||
|
||||
events = []
|
||||
|
||||
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 event in info["items"]:
|
||||
|
|
|
|||
|
|
@ -52,8 +52,8 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
|
|||
|
||||
events = []
|
||||
|
||||
start_dt = now.delta(hours=-1)
|
||||
end_dt = now.delta(minutes=5)
|
||||
start_dt = now.delta(minutes=-30)
|
||||
end_dt = now.delta(minutes=10)
|
||||
|
||||
for stream_group in api_data:
|
||||
category_id: int = stream_group.get("categoryId")
|
||||
|
|
|
|||
|
|
@ -44,7 +44,13 @@ async def get_events() -> dict[str, dict[str, str | float]]:
|
|||
|
||||
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] = {
|
||||
"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",
|
||||
query={"stream_name": name},
|
||||
),
|
||||
"logo": logo,
|
||||
"logo": logo or pic,
|
||||
"base": BASE_URL,
|
||||
"timestamp": now.timestamp(),
|
||||
"id": tvg_id or "Live.Event.us",
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ TAG = "TOTALSPRTK"
|
|||
|
||||
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:
|
||||
|
|
@ -29,12 +29,15 @@ async def process_event(url: str, url_num: int) -> tuple[str | None, str | None]
|
|||
|
||||
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.")
|
||||
|
||||
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.")
|
||||
|
||||
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")
|
||||
|
||||
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]]:
|
||||
|
|
|
|||
11
readme.md
11
readme.md
|
|
@ -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 |
|
||||
| ------- | ------------ | ---- |
|
||||
| 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` |
|
||||
| Freeform TV | HTTP Error (404) | `http://fl1.moveonjoy.com/FREE_FORM/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` |
|
||||
| NFL Network | HTTP Error (404) | `http://fl1.moveonjoy.com/NFL_NETWORK/index.m3u8` |
|
||||
---
|
||||
#### Base Channels URL
|
||||
```
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue