mirror of
https://github.com/doms9/iptv.git
synced 2026-03-11 11:57:38 +01:00
Compare commits
No commits in common. "ad40759ec2c3b28049c5c074a75ef44027bdf270" and "0d0ba7a0155d3a11fbc205dc6cda12707768dbb2" have entirely different histories.
ad40759ec2
...
0d0ba7a015
8 changed files with 108504 additions and 105519 deletions
2730
M3U8/TV.m3u8
2730
M3U8/TV.m3u8
File diff suppressed because it is too large
Load diff
208468
M3U8/TV.xml
208468
M3U8/TV.xml
File diff suppressed because one or more lines are too long
|
|
@ -1,4 +1,4 @@
|
||||||
#EXTM3U url-tvg="https://raw.githubusercontent.com/doms9/iptv/refs/heads/default/M3U8/TV.xml"
|
#EXTM3U url-tvg="https://raw.githubusercontent.com/doms9/iptv/refs/heads/default/EPG/TV.xml"
|
||||||
|
|
||||||
#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
|
#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://fl1.moveonjoy.com/ANE/index.m3u8
|
http://fl1.moveonjoy.com/ANE/index.m3u8
|
||||||
|
|
@ -308,7 +308,7 @@ http://mytvstream.net:8080/live/bn80NG/909467/20939.m3u8
|
||||||
http://mytvstream.net:8080/live/bn80NG/909467/20940.m3u8
|
http://mytvstream.net:8080/live/bn80NG/909467/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
|
#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/stvp-USBD420002446
|
https://jmp2.uk/rok-a90a91570ce0536cbb22b591ad7e0da2.m3u8
|
||||||
|
|
||||||
#EXTINF:-1 tvg-chno="102" tvg-id="NBC.Sports.Philadelphia.HD.us2" tvg-name="NBC Sports Philadelphia" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s32571_dark_360w_270h.png" group-title="TV",NBC Sports Philadelphia
|
#EXTINF:-1 tvg-chno="102" tvg-id="NBC.Sports.Philadelphia.HD.us2" tvg-name="NBC Sports Philadelphia" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s32571_dark_360w_270h.png" group-title="TV",NBC Sports Philadelphia
|
||||||
http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/136477
|
http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/136477
|
||||||
|
|
|
||||||
2726
M3U8/events.m3u8
2726
M3U8/events.m3u8
File diff suppressed because it is too large
Load diff
|
|
@ -82,7 +82,7 @@ async def main() -> None:
|
||||||
asyncio.create_task(pawa.scrape()),
|
asyncio.create_task(pawa.scrape()),
|
||||||
asyncio.create_task(roxie.scrape()),
|
asyncio.create_task(roxie.scrape()),
|
||||||
asyncio.create_task(shark.scrape()),
|
asyncio.create_task(shark.scrape()),
|
||||||
# asyncio.create_task(streambtw.scrape()),
|
asyncio.create_task(streambtw.scrape()),
|
||||||
asyncio.create_task(streamfree.scrape()),
|
asyncio.create_task(streamfree.scrape()),
|
||||||
asyncio.create_task(tvpass.scrape()),
|
asyncio.create_task(tvpass.scrape()),
|
||||||
asyncio.create_task(xstreameast.scrape()),
|
asyncio.create_task(xstreameast.scrape()),
|
||||||
|
|
|
||||||
|
|
@ -18,11 +18,7 @@ XML_CACHE = Cache(f"{TAG}-xml", exp=28_000)
|
||||||
|
|
||||||
BASE_URL = "https://cdn.livetv861.me/rss/upcoming_en.xml"
|
BASE_URL = "https://cdn.livetv861.me/rss/upcoming_en.xml"
|
||||||
|
|
||||||
VALID_SPORTS = {
|
VALID_SPORTS = {"NBA", "NHL", "NFL", "NCAA", "MLB"}
|
||||||
"Football",
|
|
||||||
"Basketball",
|
|
||||||
"Ice Hockey",
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
async def process_event(
|
async def process_event(
|
||||||
|
|
@ -54,22 +50,22 @@ async def process_event(
|
||||||
|
|
||||||
buttons = await page.query_selector_all(".lnktbj a[href*='webplayer']")
|
buttons = await page.query_selector_all(".lnktbj a[href*='webplayer']")
|
||||||
|
|
||||||
labels = await page.eval_on_selector_all(
|
href = None
|
||||||
".lnktyt span",
|
|
||||||
"elements => elements.map(el => el.textContent.trim().toLowerCase())",
|
|
||||||
)
|
|
||||||
|
|
||||||
for btn, label in zip(buttons, labels):
|
for btn in buttons:
|
||||||
if label in ["web", "youtube"]:
|
img = await btn.query_selector("img")
|
||||||
continue
|
|
||||||
|
label = (await img.get_attribute("alt") or "").lower()
|
||||||
if not (href := await btn.get_attribute("href")):
|
|
||||||
|
if not label or label == "web":
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
href = await btn.get_attribute("href")
|
||||||
break
|
break
|
||||||
|
|
||||||
else:
|
else:
|
||||||
log.warning(f"URL {url_num}) No valid sources found.")
|
log.warning(f"URL {url_num}) No available stream links.")
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
href = href if href.startswith("http") else f"https:{href}"
|
href = href if href.startswith("http") else f"https:{href}"
|
||||||
|
|
@ -134,20 +130,17 @@ async def refresh_xml_cache(now_ts: float) -> dict[str, dict[str, str | float]]:
|
||||||
if not all([title, link, sport_sum, date]):
|
if not all([title, link, sport_sum, date]):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
sprt = sport_sum.split(".", 1)
|
sport = sport_sum.split()[-1]
|
||||||
|
|
||||||
sport, league = sprt[0], "".join(sprt[1:]).strip()
|
|
||||||
|
|
||||||
if sport not in VALID_SPORTS:
|
if sport not in VALID_SPORTS:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
event_dt = Time.from_str(date)
|
event_dt = Time.from_str(date)
|
||||||
|
|
||||||
key = f"[{sport} - {league}] {title} ({TAG})"
|
key = f"[{sport}] {title} ({TAG})"
|
||||||
|
|
||||||
events[key] = {
|
events[key] = {
|
||||||
"sport": sport,
|
"sport": sport,
|
||||||
"league": league,
|
|
||||||
"event": title,
|
"event": title,
|
||||||
"link": link,
|
"link": link,
|
||||||
"event_ts": event_dt.timestamp(),
|
"event_ts": event_dt.timestamp(),
|
||||||
|
|
@ -217,15 +210,14 @@ async def scrape(browser: Browser) -> None:
|
||||||
log=log,
|
log=log,
|
||||||
)
|
)
|
||||||
|
|
||||||
sport, league, event, ts, link = (
|
sport, event, ts, link = (
|
||||||
ev["sport"],
|
ev["sport"],
|
||||||
ev["league"],
|
|
||||||
ev["event"],
|
ev["event"],
|
||||||
ev["timestamp"],
|
ev["timestamp"],
|
||||||
ev["link"],
|
ev["link"],
|
||||||
)
|
)
|
||||||
|
|
||||||
key = f"[{sport} - {league}] {event} ({TAG})"
|
key = f"[{sport}] {event} ({TAG})"
|
||||||
|
|
||||||
tvg_id, logo = leagues.get_tvg_info(sport, event)
|
tvg_id, logo = leagues.get_tvg_info(sport, event)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -107,9 +107,8 @@ async def scrape(browser: Browser) -> None:
|
||||||
url = await network.safe_process(
|
url = await network.safe_process(
|
||||||
handler,
|
handler,
|
||||||
url_num=i,
|
url_num=i,
|
||||||
semaphore=network.PW_S,
|
semaphore=network.HTTP_S,
|
||||||
log=log,
|
log=log,
|
||||||
timeout=6,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
sport, event, link = (
|
sport, event, link = (
|
||||||
|
|
|
||||||
22
readme.md
22
readme.md
|
|
@ -1,13 +1,27 @@
|
||||||
## Base Log @ 2026-01-30 04:20 UTC
|
## Base Log @ 2026-01-29 04:16 UTC
|
||||||
|
|
||||||
### ✅ Working Streams: 142<br>❌ Dead Streams: 4
|
### ✅ Working Streams: 128<br>❌ Dead Streams: 18
|
||||||
|
|
||||||
| Channel | Error (Code) | Link |
|
| Channel | Error (Code) | Link |
|
||||||
| ------- | ------------ | ---- |
|
| ------- | ------------ | ---- |
|
||||||
|
| ESPN2 | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/2210.m3u8` |
|
||||||
|
| FDSN Detroit | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/20930.m3u8` |
|
||||||
|
| FDSN Florida | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/46794.m3u8` |
|
||||||
|
| FDSN Midwest | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/66795.m3u8` |
|
||||||
|
| FDSN North | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/58827.m3u8` |
|
||||||
|
| FDSN Oklahoma | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/20934.m3u8` |
|
||||||
|
| FDSN SoCal | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/221151.m3u8` |
|
||||||
|
| FDSN West | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/20932.m3u8` |
|
||||||
|
| FDSN Wisconsin | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/78599.m3u8` |
|
||||||
| FXX | HTTP Error (404) | `https://fl1.moveonjoy.com/FXX/index.m3u8` |
|
| FXX | HTTP Error (404) | `https://fl1.moveonjoy.com/FXX/index.m3u8` |
|
||||||
| Premier Sports 1 | HTTP Error (403) | `http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/117037` |
|
| NBC Sports Boston | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/20939.m3u8` |
|
||||||
|
| NBC Sports California | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/20940.m3u8` |
|
||||||
|
| NESN | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/46726.m3u8` |
|
||||||
| Premier Sports 2 | HTTP Error (502) | `http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/117038` |
|
| Premier Sports 2 | HTTP Error (502) | `http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/117038` |
|
||||||
| Sportsnet One | HTTP Error (403) | `http://mytvstream.net:8080/live/bn80NG/909467/57297.m3u8` |
|
| Space City Home Network | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/213668.m3u8` |
|
||||||
|
| Sportsnet East | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/57298.m3u8` |
|
||||||
|
| Sportsnet One | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/57297.m3u8` |
|
||||||
|
| The Weather Channel | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/18926.m3u8` |
|
||||||
---
|
---
|
||||||
#### Base Channels URL
|
#### Base Channels URL
|
||||||
```
|
```
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue