mirror of
https://github.com/doms9/iptv.git
synced 2026-03-11 11:57:38 +01:00
Compare commits
41 commits
0d0ba7a015
...
ad40759ec2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ad40759ec2 | ||
|
|
662a615392 | ||
|
|
a9cbac7ebf | ||
|
|
ad270203f7 | ||
|
|
0a454ebc62 | ||
|
|
70268363df | ||
|
|
11e894e261 | ||
|
|
73db349274 | ||
|
|
4833c0a6d5 | ||
|
|
00000d9c8c | ||
|
|
8be3067419 | ||
|
|
ddbe759fcb | ||
|
|
af7e55ef86 | ||
|
|
023b80b7df | ||
|
|
664c57bb5a | ||
|
|
00000d938e | ||
|
|
00000d9d9e | ||
|
|
00000d9e96 | ||
|
|
ab3d43599a | ||
|
|
3ee1a12e6e | ||
|
|
a0f6bf1240 | ||
|
|
044aa3d055 | ||
|
|
433aebe9e9 | ||
|
|
4fb81bbb82 | ||
|
|
6d43365576 | ||
|
|
b461d3dcb5 | ||
|
|
f2456ba331 | ||
|
|
c07fa6efbc | ||
|
|
09727563c1 | ||
|
|
74e8a25a5d | ||
|
|
92894d4712 | ||
|
|
ea2e223ca9 | ||
|
|
5ec530b033 | ||
|
|
cd738c572c | ||
|
|
c3c4cf6671 | ||
|
|
1bc40cfb4b | ||
|
|
526a5a5d47 | ||
|
|
4de9d84507 | ||
|
|
00000d91bf | ||
|
|
0625fe5be8 | ||
|
|
c1ddb9bd8b |
8 changed files with 106179 additions and 109164 deletions
2736
M3U8/TV.m3u8
2736
M3U8/TV.m3u8
File diff suppressed because it is too large
Load diff
209806
M3U8/TV.xml
209806
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/EPG/TV.xml"
|
#EXTM3U url-tvg="https://raw.githubusercontent.com/doms9/iptv/refs/heads/default/M3U8/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/rok-a90a91570ce0536cbb22b591ad7e0da2.m3u8
|
https://jmp2.uk/stvp-USBD420002446
|
||||||
|
|
||||||
#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
|
||||||
|
|
|
||||||
2732
M3U8/events.m3u8
2732
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,7 +18,11 @@ 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 = {"NBA", "NHL", "NFL", "NCAA", "MLB"}
|
VALID_SPORTS = {
|
||||||
|
"Football",
|
||||||
|
"Basketball",
|
||||||
|
"Ice Hockey",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
async def process_event(
|
async def process_event(
|
||||||
|
|
@ -50,22 +54,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']")
|
||||||
|
|
||||||
href = None
|
labels = await page.eval_on_selector_all(
|
||||||
|
".lnktyt span",
|
||||||
|
"elements => elements.map(el => el.textContent.trim().toLowerCase())",
|
||||||
|
)
|
||||||
|
|
||||||
for btn in buttons:
|
for btn, label in zip(buttons, labels):
|
||||||
img = await btn.query_selector("img")
|
if label in ["web", "youtube"]:
|
||||||
|
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 available stream links.")
|
log.warning(f"URL {url_num}) No valid sources found.")
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
href = href if href.startswith("http") else f"https:{href}"
|
href = href if href.startswith("http") else f"https:{href}"
|
||||||
|
|
@ -130,17 +134,20 @@ 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
|
||||||
|
|
||||||
sport = sport_sum.split()[-1]
|
sprt = 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}] {title} ({TAG})"
|
key = f"[{sport} - {league}] {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(),
|
||||||
|
|
@ -210,14 +217,15 @@ async def scrape(browser: Browser) -> None:
|
||||||
log=log,
|
log=log,
|
||||||
)
|
)
|
||||||
|
|
||||||
sport, event, ts, link = (
|
sport, league, event, ts, link = (
|
||||||
ev["sport"],
|
ev["sport"],
|
||||||
|
ev["league"],
|
||||||
ev["event"],
|
ev["event"],
|
||||||
ev["timestamp"],
|
ev["timestamp"],
|
||||||
ev["link"],
|
ev["link"],
|
||||||
)
|
)
|
||||||
|
|
||||||
key = f"[{sport}] {event} ({TAG})"
|
key = f"[{sport} - {league}] {event} ({TAG})"
|
||||||
|
|
||||||
tvg_id, logo = leagues.get_tvg_info(sport, event)
|
tvg_id, logo = leagues.get_tvg_info(sport, event)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -107,8 +107,9 @@ 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.HTTP_S,
|
semaphore=network.PW_S,
|
||||||
log=log,
|
log=log,
|
||||||
|
timeout=6,
|
||||||
)
|
)
|
||||||
|
|
||||||
sport, event, link = (
|
sport, event, link = (
|
||||||
|
|
|
||||||
22
readme.md
22
readme.md
|
|
@ -1,27 +1,13 @@
|
||||||
## Base Log @ 2026-01-29 04:16 UTC
|
## Base Log @ 2026-01-30 04:20 UTC
|
||||||
|
|
||||||
### ✅ Working Streams: 128<br>❌ Dead Streams: 18
|
### ✅ Working Streams: 142<br>❌ Dead Streams: 4
|
||||||
|
|
||||||
| 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` |
|
||||||
| NBC Sports Boston | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/20939.m3u8` |
|
| Premier Sports 1 | HTTP Error (403) | `http://hardcoremedia.xyz:80/NW3Vk7xXwW/8375773282/117037` |
|
||||||
| 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` |
|
||||||
| Space City Home Network | HTTP Error (404) | `http://mytvstream.net:8080/live/bn80NG/909467/213668.m3u8` |
|
| Sportsnet One | HTTP Error (403) | `http://mytvstream.net:8080/live/bn80NG/909467/57297.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