mirror of
https://github.com/doms9/iptv.git
synced 2026-01-20 03:49:03 +01:00
Compare commits
34 commits
13e9afae40
...
f8603e08d5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f8603e08d5 | ||
|
|
8d9dff24f3 | ||
|
|
883c92f0d1 | ||
|
|
12ac33157e | ||
|
|
b059172d24 | ||
|
|
efb97f5eab | ||
|
|
9a81219b9d | ||
|
|
99f281669f | ||
|
|
48ae373c04 | ||
|
|
ce1ac3799a | ||
|
|
85afa4a1df | ||
|
|
1930ffccb3 | ||
|
|
03470c68ed | ||
|
|
fea650bf8b | ||
|
|
7fb8cef96f | ||
|
|
6b083aafd7 | ||
|
|
6c873696fb | ||
|
|
7065e49dc3 | ||
|
|
657670e014 | ||
|
|
d4f3a411f8 | ||
|
|
dda9524130 | ||
|
|
d7ea078d2c | ||
|
|
34da095dd9 | ||
|
|
b32c039f9f | ||
|
|
17c1158079 | ||
|
|
6d454e2c4c | ||
|
|
cf4ba3f980 | ||
|
|
b401defa84 | ||
|
|
caa52418c6 | ||
|
|
5a8deea019 | ||
|
|
13ff869ed4 | ||
|
|
00000d9924 | ||
|
|
3780698908 | ||
|
|
b11108f62c |
14 changed files with 90040 additions and 90706 deletions
174798
EPG/TV.xml
174798
EPG/TV.xml
File diff suppressed because one or more lines are too long
2952
M3U8/TV.m3u8
2952
M3U8/TV.m3u8
File diff suppressed because it is too large
Load diff
2952
M3U8/events.m3u8
2952
M3U8/events.m3u8
File diff suppressed because it is too large
Load diff
|
|
@ -62,7 +62,7 @@ async def main() -> None:
|
||||||
asyncio.create_task(streamsgate.scrape()),
|
asyncio.create_task(streamsgate.scrape()),
|
||||||
asyncio.create_task(strmd.scrape()),
|
asyncio.create_task(strmd.scrape()),
|
||||||
asyncio.create_task(tvpass.scrape()),
|
asyncio.create_task(tvpass.scrape()),
|
||||||
asyncio.create_task(watchfooty.scrape()),
|
# asyncio.create_task(watchfooty.scrape()),
|
||||||
asyncio.create_task(webcast.scrape()),
|
asyncio.create_task(webcast.scrape()),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -108,7 +108,7 @@ async def scrape() -> None:
|
||||||
|
|
||||||
if events:
|
if events:
|
||||||
async with async_playwright() as p:
|
async with async_playwright() as p:
|
||||||
browser, context = await network.browser(p, browser="brave")
|
browser, context = await network.browser(p, browser="external")
|
||||||
|
|
||||||
for i, ev in enumerate(events, start=1):
|
for i, ev in enumerate(events, start=1):
|
||||||
handler = partial(
|
handler = partial(
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@ async def scrape() -> None:
|
||||||
now = Time.clean(Time.now()).timestamp()
|
now = Time.clean(Time.now()).timestamp()
|
||||||
|
|
||||||
async with async_playwright() as p:
|
async with async_playwright() as p:
|
||||||
browser, context = await network.browser(p, browser="brave")
|
browser, context = await network.browser(p, browser="external")
|
||||||
|
|
||||||
for i, ev in enumerate(events, start=1):
|
for i, ev in enumerate(events, start=1):
|
||||||
handler = partial(
|
handler = partial(
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ async def scrape() -> None:
|
||||||
|
|
||||||
if events:
|
if events:
|
||||||
async with async_playwright() as p:
|
async with async_playwright() as p:
|
||||||
browser, context = await network.browser(p, browser="brave")
|
browser, context = await network.browser(p, browser="external")
|
||||||
|
|
||||||
for i, ev in enumerate(events, start=1):
|
for i, ev in enumerate(events, start=1):
|
||||||
handler = partial(
|
handler = partial(
|
||||||
|
|
|
||||||
|
|
@ -149,7 +149,7 @@ async def scrape() -> None:
|
||||||
|
|
||||||
if events:
|
if events:
|
||||||
async with async_playwright() as p:
|
async with async_playwright() as p:
|
||||||
browser, context = await network.browser(p, browser="brave")
|
browser, context = await network.browser(p, browser="external")
|
||||||
|
|
||||||
for i, ev in enumerate(events, start=1):
|
for i, ev in enumerate(events, start=1):
|
||||||
handler = partial(
|
handler = partial(
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,7 @@ async def scrape() -> None:
|
||||||
|
|
||||||
if events:
|
if events:
|
||||||
async with async_playwright() as p:
|
async with async_playwright() as p:
|
||||||
browser, context = await network.browser(p, browser="brave")
|
browser, context = await network.browser(p, browser="external")
|
||||||
|
|
||||||
for i, ev in enumerate(events, start=1):
|
for i, ev in enumerate(events, start=1):
|
||||||
handler = partial(
|
handler = partial(
|
||||||
|
|
|
||||||
|
|
@ -137,7 +137,7 @@ async def scrape() -> None:
|
||||||
|
|
||||||
if events:
|
if events:
|
||||||
async with async_playwright() as p:
|
async with async_playwright() as p:
|
||||||
browser, context = await network.browser(p, browser="brave")
|
browser, context = await network.browser(p, browser="external")
|
||||||
|
|
||||||
for i, ev in enumerate(events, start=1):
|
for i, ev in enumerate(events, start=1):
|
||||||
handler = partial(
|
handler = partial(
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ log = get_logger(__name__)
|
||||||
|
|
||||||
urls: dict[str, dict[str, str | float]] = {}
|
urls: dict[str, dict[str, str | float]] = {}
|
||||||
|
|
||||||
TAG = "TVP"
|
TAG = "TVPASS"
|
||||||
|
|
||||||
CACHE_FILE = Cache(f"{TAG.lower()}.json", exp=86_400)
|
CACHE_FILE = Cache(f"{TAG.lower()}.json", exp=86_400)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,14 +18,14 @@ T = TypeVar("T")
|
||||||
|
|
||||||
|
|
||||||
class Network:
|
class Network:
|
||||||
proxy_base = "https://stream.nvrmind.xyz"
|
|
||||||
|
|
||||||
UA = (
|
UA = (
|
||||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
|
||||||
"AppleWebKit/537.36 (KHTML, like Gecko) "
|
"AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||||
"Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0"
|
"Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
proxy_base = "https://stream.nvrmind.xyz"
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.client = httpx.AsyncClient(
|
self.client = httpx.AsyncClient(
|
||||||
timeout=5,
|
timeout=5,
|
||||||
|
|
@ -41,14 +41,12 @@ class Network:
|
||||||
query: dict | None = None,
|
query: dict | None = None,
|
||||||
) -> str:
|
) -> str:
|
||||||
|
|
||||||
base = network.proxy_base
|
|
||||||
|
|
||||||
tag = tag.lower()
|
tag = tag.lower()
|
||||||
|
|
||||||
return (
|
return (
|
||||||
f"{urljoin(base, f'{tag}/{path}')}?{urlencode(query)}"
|
f"{urljoin(network.proxy_base, f'{tag}/{path}')}?{urlencode(query)}"
|
||||||
if query
|
if query
|
||||||
else urljoin(base, f"{tag}/{path}")
|
else urljoin(network.proxy_base, f"{tag}/{path}")
|
||||||
)
|
)
|
||||||
|
|
||||||
async def request(
|
async def request(
|
||||||
|
|
@ -207,12 +205,9 @@ class Network:
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
async def browser(
|
async def browser(
|
||||||
playwright: Playwright,
|
playwright: Playwright, browser: str = "internal"
|
||||||
browser: str = "firefox",
|
|
||||||
ignore_https_errors: bool = False,
|
|
||||||
) -> tuple[Browser, BrowserContext]:
|
) -> tuple[Browser, BrowserContext]:
|
||||||
|
if browser == "external":
|
||||||
if browser == "brave":
|
|
||||||
brwsr = await playwright.chromium.connect_over_cdp("http://localhost:9222")
|
brwsr = await playwright.chromium.connect_over_cdp("http://localhost:9222")
|
||||||
|
|
||||||
context = brwsr.contexts[0]
|
context = brwsr.contexts[0]
|
||||||
|
|
@ -222,7 +217,7 @@ class Network:
|
||||||
|
|
||||||
context = await brwsr.new_context(
|
context = await brwsr.new_context(
|
||||||
user_agent=Network.UA,
|
user_agent=Network.UA,
|
||||||
ignore_https_errors=ignore_https_errors,
|
ignore_https_errors=False,
|
||||||
viewport={"width": 1366, "height": 768},
|
viewport={"width": 1366, "height": 768},
|
||||||
device_scale_factor=1,
|
device_scale_factor=1,
|
||||||
locale="en-US",
|
locale="en-US",
|
||||||
|
|
|
||||||
|
|
@ -261,7 +261,7 @@ async def scrape() -> None:
|
||||||
|
|
||||||
if events:
|
if events:
|
||||||
async with async_playwright() as p:
|
async with async_playwright() as p:
|
||||||
browser, context = await network.browser(p, browser="brave")
|
browser, context = await network.browser(p, browser="external")
|
||||||
|
|
||||||
for i, ev in enumerate(events, start=1):
|
for i, ev in enumerate(events, start=1):
|
||||||
handler = partial(
|
handler = partial(
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,10 @@
|
||||||
## Base Log @ 2025-12-19 20:41 UTC
|
## Base Log @ 2025-12-20 20:39 UTC
|
||||||
|
|
||||||
### ✅ Working Streams: 146<br>❌ Dead Streams: 0
|
### ✅ Working Streams: 145<br>❌ Dead Streams: 1
|
||||||
|
|
||||||
|
| Channel | Error (Code) | Link |
|
||||||
|
| ------- | ------------ | ---- |
|
||||||
|
| FDSN Florida | HTTP Error (403) | `http://cord-cutter.net:8080/30550113/30550113/46794` |
|
||||||
---
|
---
|
||||||
#### Base Channels URL
|
#### Base Channels URL
|
||||||
```
|
```
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue