Compare commits

...

37 commits

Author SHA1 Message Date
GitHub Actions Bot
a3185427c7 update M3U8 2025-12-27 17:30:50 -05:00
GitHub Actions Bot
93037cbee3 update M3U8 2025-12-27 17:02:13 -05:00
GitHub Actions Bot
cb030b444f update M3U8 2025-12-27 16:31:49 -05:00
GitHub Actions Bot
3b98983e7c update M3U8 2025-12-27 16:00:44 -05:00
GitHub Actions Bot
d53d45dfb0 health log 2025-12-27 20:41:03 +00:00
GitHub Actions Bot
0a9d45475a update M3U8 2025-12-27 15:32:01 -05:00
GitHub Actions Bot
ab606abd40 update M3U8 2025-12-27 15:01:37 -05:00
GitHub Actions Bot
996a7c34cc update M3U8 2025-12-27 14:31:25 -05:00
GitHub Actions Bot
4553521122 update M3U8 2025-12-27 14:01:22 -05:00
GitHub Actions Bot
308cc87971 update EPG 2025-12-27 18:54:47 +00:00
GitHub Actions Bot
e1f469eac4 update M3U8 2025-12-27 13:35:49 -05:00
doms9
00000d922d e
edit totalsportek caching
add base for cdnlivetv
2025-12-27 13:17:19 -05:00
GitHub Actions Bot
94636e34ca update M3U8 2025-12-27 13:02:34 -05:00
doms9
00000d9875 e
cache nulls from totalsportek
2025-12-27 12:52:18 -05:00
GitHub Actions Bot
2240077021 update M3U8 2025-12-27 12:04:12 -05:00
GitHub Actions Bot
d7542a49ef update M3U8 2025-12-27 11:01:59 -05:00
doms9
00000d979f e 2025-12-27 10:25:35 -05:00
GitHub Actions Bot
7b48b92660 update M3U8 2025-12-27 10:08:04 -05:00
GitHub Actions Bot
2bd481258a health log 2025-12-27 14:40:13 +00:00
GitHub Actions Bot
0ca5bc2e61 update M3U8 2025-12-27 09:02:25 -05:00
GitHub Actions Bot
fd804b96db update M3U8 2025-12-27 08:03:19 -05:00
GitHub Actions Bot
682c59935a update EPG 2025-12-27 10:50:59 +00:00
GitHub Actions Bot
b79a772494 health log 2025-12-27 08:46:52 +00:00
GitHub Actions Bot
bd6eb99a6f update M3U8 2025-12-26 23:30:46 -05:00
GitHub Actions Bot
af9e2dbb45 update M3U8 2025-12-26 23:01:08 -05:00
GitHub Actions Bot
42b339567e update EPG 2025-12-27 03:45:54 +00:00
GitHub Actions Bot
8e75fe98a7 health log 2025-12-27 03:43:05 +00:00
GitHub Actions Bot
93e4a4d023 update M3U8 2025-12-26 22:31:20 -05:00
GitHub Actions Bot
6800fd8cbe update M3U8 2025-12-26 22:00:42 -05:00
GitHub Actions Bot
adf1de38ad update M3U8 2025-12-26 21:31:06 -05:00
GitHub Actions Bot
bd99e19954 update M3U8 2025-12-26 21:01:16 -05:00
GitHub Actions Bot
2d6a2c2102 update M3U8 2025-12-26 20:30:45 -05:00
GitHub Actions Bot
83e49eb081 update M3U8 2025-12-26 20:00:56 -05:00
GitHub Actions Bot
a0ca49044e update M3U8 2025-12-26 19:30:51 -05:00
GitHub Actions Bot
687958aa2c update M3U8 2025-12-26 19:00:53 -05:00
GitHub Actions Bot
2120415d72 update M3U8 2025-12-26 18:30:53 -05:00
GitHub Actions Bot
2123d9b741 update M3U8 2025-12-26 18:00:50 -05:00
12 changed files with 92142 additions and 81012 deletions

169000
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

@ -21,6 +21,8 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
events = []
if not (api_data := API_FILE.load(per_entry=False)):
log.info("Refreshing API cache")
api_data = {}
if r := await network.request(
@ -136,7 +138,7 @@ async def scrape() -> None:
entry = {
"url": url,
"logo": logo,
"base": "",
"base": link,
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,

View file

@ -25,6 +25,8 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
now = Time.clean(Time.now())
if not (api_data := API_CACHE.load(per_entry=False)):
log.info("Refreshing API cache")
api_data = {}
if r := await network.request(BASE_URL, log=log):

View file

@ -31,6 +31,8 @@ async def get_events(api_url: str, cached_keys: list[str]) -> list[dict[str, str
events = []
if not (api_data := API_FILE.load(per_entry=False)):
log.info("Refreshing API cache")
api_data = {}
if r := await network.request(api_url, log=log):

View file

@ -35,6 +35,8 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
now = Time.clean(Time.now())
if not (api_data := API_FILE.load(per_entry=False, index=-1)):
log.info("Refreshing API cache")
api_data = []
if r := await network.request(

View file

@ -37,6 +37,8 @@ async def get_events(url: str, cached_keys: list[str]) -> list[dict[str, str]]:
now = Time.clean(Time.now())
if not (api_data := API_FILE.load(per_entry=False, index=-1)):
log.info("Refreshing API cache")
api_data = []
if r := await network.request(

View file

@ -79,6 +79,12 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
sport = span.text(strip=True)
if node.tag == "a" and "nav-link2" in node_class:
if not (time_node := node.css_first(".col-3")):
continue
if not time_node.text(strip=True) == "MatchStarted":
continue
if not (href := node.attributes.get("href")):
continue
@ -108,9 +114,11 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
async def scrape() -> None:
cached_urls = CACHE_FILE.load()
cached_count = len(cached_urls)
valid_urls = {k: v for k, v in cached_urls.items() if v["url"]}
urls.update(cached_urls)
valid_count = cached_count = len(valid_urls)
urls.update(valid_urls)
log.info(f"Loaded {cached_count} event(s) from cache")
@ -137,29 +145,33 @@ async def scrape() -> None:
log=log,
)
sport, event, link = (
ev["sport"],
ev["event"],
ev["link"],
)
key = f"[{sport}] {event} ({TAG})"
tvg_id, logo = leagues.get_tvg_info(sport, event)
entry = {
"url": url,
"logo": logo,
"base": iframe,
"timestamp": now.timestamp(),
"id": tvg_id or "Live.Event.us",
"link": link,
}
cached_urls[key] = entry
if url:
sport, event, link = (
ev["sport"],
ev["event"],
ev["link"],
)
valid_count += 1
key = f"[{sport}] {event} ({TAG})"
urls[key] = entry
tvg_id, logo = leagues.get_tvg_info(sport, event)
entry = {
"url": url,
"logo": logo,
"base": iframe,
"timestamp": now.timestamp(),
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry
if new_count := len(cached_urls) - cached_count:
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)")
else:

View file

@ -304,6 +304,7 @@ async def scrape() -> None:
if url:
valid_count += 1
urls[key] = entry
finally:

View file

@ -1,7 +1,10 @@
## Base Log @ 2025-12-26 20:40 UTC
## Base Log @ 2025-12-27 20:41 UTC
### ✅ Working Streams: 146<br>❌ Dead Streams: 0
### ✅ Working Streams: 145<br>❌ Dead Streams: 1
| Channel | Error (Code) | Link |
| ------- | ------------ | ---- |
| ION TV | HTTP Error (403) | `http://cord-cutter.net:8080/k4Svp2/645504/9297` |
---
#### Base Channels URL
```

18
uv.lock generated
View file

@ -195,21 +195,21 @@ requires-dist = [
[[package]]
name = "playwright"
version = "1.57.0"
version = "1.56.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "greenlet" },
{ name = "pyee" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/ed/b6/e17543cea8290ae4dced10be21d5a43c360096aa2cce0aa7039e60c50df3/playwright-1.57.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:9351c1ac3dfd9b3820fe7fc4340d96c0d3736bb68097b9b7a69bd45d25e9370c", size = 41985039, upload-time = "2025-12-09T08:06:18.408Z" },
{ url = "https://files.pythonhosted.org/packages/8b/04/ef95b67e1ff59c080b2effd1a9a96984d6953f667c91dfe9d77c838fc956/playwright-1.57.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a4a9d65027bce48eeba842408bcc1421502dfd7e41e28d207e94260fa93ca67e", size = 40775575, upload-time = "2025-12-09T08:06:22.105Z" },
{ url = "https://files.pythonhosted.org/packages/60/bd/5563850322a663956c927eefcf1457d12917e8f118c214410e815f2147d1/playwright-1.57.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:99104771abc4eafee48f47dac2369e0015516dc1ce8c409807d2dd440828b9a4", size = 41985042, upload-time = "2025-12-09T08:06:25.357Z" },
{ url = "https://files.pythonhosted.org/packages/56/61/3a803cb5ae0321715bfd5247ea871d25b32c8f372aeb70550a90c5f586df/playwright-1.57.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:284ed5a706b7c389a06caa431b2f0ba9ac4130113c3a779767dda758c2497bb1", size = 45975252, upload-time = "2025-12-09T08:06:29.186Z" },
{ url = "https://files.pythonhosted.org/packages/83/d7/b72eb59dfbea0013a7f9731878df8c670f5f35318cedb010c8a30292c118/playwright-1.57.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a1bae6c0a07839cdeaddbc0756b3b2b85e476c07945f64ece08f1f956a86f1", size = 45706917, upload-time = "2025-12-09T08:06:32.549Z" },
{ url = "https://files.pythonhosted.org/packages/e4/09/3fc9ebd7c95ee54ba6a68d5c0bc23e449f7235f4603fc60534a364934c16/playwright-1.57.0-py3-none-win32.whl", hash = "sha256:1dd93b265688da46e91ecb0606d36f777f8eadcf7fbef12f6426b20bf0c9137c", size = 36553860, upload-time = "2025-12-09T08:06:35.864Z" },
{ url = "https://files.pythonhosted.org/packages/58/d4/dcdfd2a33096aeda6ca0d15584800443dd2be64becca8f315634044b135b/playwright-1.57.0-py3-none-win_amd64.whl", hash = "sha256:6caefb08ed2c6f29d33b8088d05d09376946e49a73be19271c8cd5384b82b14c", size = 36553864, upload-time = "2025-12-09T08:06:38.915Z" },
{ url = "https://files.pythonhosted.org/packages/6a/60/fe31d7e6b8907789dcb0584f88be741ba388413e4fbce35f1eba4e3073de/playwright-1.57.0-py3-none-win_arm64.whl", hash = "sha256:5f065f5a133dbc15e6e7c71e7bc04f258195755b1c32a432b792e28338c8335e", size = 32837940, upload-time = "2025-12-09T08:06:42.268Z" },
{ url = "https://files.pythonhosted.org/packages/6b/31/a5362cee43f844509f1f10d8a27c9cc0e2f7bdce5353d304d93b2151c1b1/playwright-1.56.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:b33eb89c516cbc6723f2e3523bada4a4eb0984a9c411325c02d7016a5d625e9c", size = 40611424, upload-time = "2025-11-11T18:39:10.175Z" },
{ url = "https://files.pythonhosted.org/packages/ef/95/347eef596d8778fb53590dc326c344d427fa19ba3d42b646fce2a4572eb3/playwright-1.56.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b228b3395212b9472a4ee5f1afe40d376eef9568eb039fcb3e563de8f4f4657b", size = 39400228, upload-time = "2025-11-11T18:39:13.915Z" },
{ url = "https://files.pythonhosted.org/packages/b9/54/6ad97b08b2ca1dfcb4fbde4536c4f45c0d9d8b1857a2d20e7bbfdf43bf15/playwright-1.56.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:0ef7e6fd653267798a8a968ff7aa2dcac14398b7dd7440ef57524e01e0fbbd65", size = 40611424, upload-time = "2025-11-11T18:39:17.093Z" },
{ url = "https://files.pythonhosted.org/packages/e4/76/6d409e37e82cdd5dda3df1ab958130ae32b46e42458bd4fc93d7eb8749cb/playwright-1.56.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:404be089b49d94bc4c1fe0dfb07664bda5ffe87789034a03bffb884489bdfb5c", size = 46263122, upload-time = "2025-11-11T18:39:20.619Z" },
{ url = "https://files.pythonhosted.org/packages/4f/84/fb292cc5d45f3252e255ea39066cd1d2385c61c6c1596548dfbf59c88605/playwright-1.56.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64cda7cf4e51c0d35dab55190841bfcdfb5871685ec22cb722cd0ad2df183e34", size = 46110645, upload-time = "2025-11-11T18:39:24.005Z" },
{ url = "https://files.pythonhosted.org/packages/61/bd/8c02c3388ae14edc374ac9f22cbe4e14826c6a51b2d8eaf86e89fabee264/playwright-1.56.0-py3-none-win32.whl", hash = "sha256:d87b79bcb082092d916a332c27ec9732e0418c319755d235d93cc6be13bdd721", size = 35639837, upload-time = "2025-11-11T18:39:27.174Z" },
{ url = "https://files.pythonhosted.org/packages/64/27/f13b538fbc6b7a00152f4379054a49f6abc0bf55ac86f677ae54bc49fb82/playwright-1.56.0-py3-none-win_amd64.whl", hash = "sha256:3c7fc49bb9e673489bf2622855f9486d41c5101bbed964638552b864c4591f94", size = 35639843, upload-time = "2025-11-11T18:39:30.851Z" },
{ url = "https://files.pythonhosted.org/packages/f2/c7/3ee8b556107995846576b4fe42a08ed49b8677619421f2afacf6ee421138/playwright-1.56.0-py3-none-win_arm64.whl", hash = "sha256:2745490ae8dd58d27e5ea4d9aa28402e8e2991eb84fb4b2fd5fbde2106716f6f", size = 31248959, upload-time = "2025-11-11T18:39:33.998Z" },
]
[[package]]