Compare commits

..

34 commits

Author SHA1 Message Date
GitHub Actions Bot
f8603e08d5 update M3U8 2025-12-20 16:30:33 -05:00
GitHub Actions Bot
8d9dff24f3 update M3U8 2025-12-20 16:00:57 -05:00
GitHub Actions Bot
883c92f0d1 health log 2025-12-20 20:39:22 +00:00
GitHub Actions Bot
12ac33157e update M3U8 2025-12-20 15:32:18 -05:00
GitHub Actions Bot
b059172d24 update M3U8 2025-12-20 15:01:39 -05:00
GitHub Actions Bot
efb97f5eab update M3U8 2025-12-20 14:31:19 -05:00
GitHub Actions Bot
9a81219b9d update M3U8 2025-12-20 14:01:28 -05:00
GitHub Actions Bot
99f281669f update EPG 2025-12-20 18:52:26 +00:00
GitHub Actions Bot
48ae373c04 update M3U8 2025-12-20 13:31:15 -05:00
GitHub Actions Bot
ce1ac3799a update M3U8 2025-12-20 13:01:21 -05:00
GitHub Actions Bot
85afa4a1df update M3U8 2025-12-20 12:03:01 -05:00
GitHub Actions Bot
1930ffccb3 update M3U8 2025-12-20 11:02:42 -05:00
GitHub Actions Bot
03470c68ed update M3U8 2025-12-20 10:03:39 -05:00
GitHub Actions Bot
fea650bf8b health log 2025-12-20 14:39:36 +00:00
GitHub Actions Bot
7fb8cef96f update M3U8 2025-12-20 09:01:10 -05:00
GitHub Actions Bot
6b083aafd7 update M3U8 2025-12-20 08:02:04 -05:00
GitHub Actions Bot
6c873696fb update EPG 2025-12-20 10:50:06 +00:00
GitHub Actions Bot
7065e49dc3 health log 2025-12-20 08:45:31 +00:00
GitHub Actions Bot
657670e014 update M3U8 2025-12-19 23:31:13 -05:00
GitHub Actions Bot
d4f3a411f8 update M3U8 2025-12-19 23:00:42 -05:00
GitHub Actions Bot
dda9524130 update EPG 2025-12-20 03:40:00 +00:00
GitHub Actions Bot
d7ea078d2c health log 2025-12-20 03:35:44 +00:00
GitHub Actions Bot
34da095dd9 update M3U8 2025-12-19 22:31:03 -05:00
GitHub Actions Bot
b32c039f9f update M3U8 2025-12-19 22:00:32 -05:00
GitHub Actions Bot
17c1158079 update M3U8 2025-12-19 21:31:05 -05:00
GitHub Actions Bot
6d454e2c4c update M3U8 2025-12-19 20:30:50 -05:00
GitHub Actions Bot
cf4ba3f980 update M3U8 2025-12-19 20:01:17 -05:00
GitHub Actions Bot
b401defa84 update M3U8 2025-12-19 19:32:13 -05:00
GitHub Actions Bot
caa52418c6 update M3U8 2025-12-19 19:02:39 -05:00
GitHub Actions Bot
5a8deea019 update M3U8 2025-12-19 18:30:34 -05:00
GitHub Actions Bot
13ff869ed4 update M3U8 2025-12-19 18:00:58 -05:00
doms9
00000d9924 e 2025-12-19 17:58:37 -05:00
GitHub Actions Bot
3780698908 update M3U8 2025-12-19 17:30:20 -05:00
GitHub Actions Bot
b11108f62c update M3U8 2025-12-19 17:00:57 -05:00
14 changed files with 90040 additions and 90706 deletions

174798
EPG/TV.xml

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -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()),
] ]

View file

@ -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(

View file

@ -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(

View file

@ -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(

View file

@ -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(

View file

@ -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(

View file

@ -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(

View file

@ -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)

View file

@ -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",

View file

@ -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(

View file

@ -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
``` ```