mirror of
https://github.com/doms9/iptv.git
synced 2026-06-05 02:33:08 +02:00
Compare commits
34 commits
448fbe17fa
...
a8988791bb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a8988791bb | ||
|
|
2e9406eaae | ||
|
|
dda2a6163d | ||
|
|
9dfe213970 | ||
|
|
68d4d911a7 | ||
|
|
ae7b1539b0 | ||
|
|
3fd48117b2 | ||
|
|
244b50c2b2 | ||
|
|
4149ba3f41 | ||
|
|
076e29e224 | ||
|
|
85be8c4815 | ||
|
|
b7e4a02d57 | ||
|
|
21339d6bb2 | ||
|
|
5878aea5d5 | ||
|
|
bdaab1b780 | ||
|
|
b013627789 | ||
|
|
c1841e0d35 | ||
|
|
65e9ad4500 | ||
|
|
f562876aa7 | ||
|
|
b2637d8d92 | ||
|
|
2ad49908ae | ||
|
|
c164a658cd | ||
|
|
8a35fea4c8 | ||
|
|
00000d991e | ||
|
|
287e51ff33 | ||
|
|
539bdf604d | ||
|
|
22638b9656 | ||
|
|
a5c087bb9d | ||
|
|
157389449d | ||
|
|
af0cef2aa2 | ||
|
|
0e1f707b4a | ||
|
|
c53ed5a716 | ||
|
|
c4bea25e6f | ||
|
|
0038c1c8b0 |
6 changed files with 125359 additions and 123505 deletions
2706
M3U8/TV.m3u8
2706
M3U8/TV.m3u8
File diff suppressed because it is too large
Load diff
242849
M3U8/TV.xml
242849
M3U8/TV.xml
File diff suppressed because one or more lines are too long
2706
M3U8/events.m3u8
2706
M3U8/events.m3u8
File diff suppressed because it is too large
Load diff
|
|
@ -1,4 +1,6 @@
|
|||
import asyncio
|
||||
import json
|
||||
import re
|
||||
from functools import partial
|
||||
from urllib.parse import urljoin
|
||||
|
||||
|
|
@ -53,35 +55,30 @@ async def process_event(
|
|||
return m3u8_url
|
||||
|
||||
|
||||
async def get_api_data() -> dict[str, dict[str, list[dict]]]:
|
||||
tasks = [
|
||||
(
|
||||
sport,
|
||||
network.request(
|
||||
urljoin(url, "api/v2/stateshot"),
|
||||
log=log,
|
||||
),
|
||||
)
|
||||
for sport, url in API_URLS.items()
|
||||
]
|
||||
|
||||
results = await asyncio.gather(*(task for _, task in tasks))
|
||||
|
||||
return {sport: r.json() for (sport, _), r in zip(tasks, results) if r}
|
||||
|
||||
|
||||
async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
|
||||
now = Time.clean(Time.now())
|
||||
tasks = [network.request(url, log=log) for url in BASE_URLS.values()]
|
||||
|
||||
api_data = await get_api_data()
|
||||
results = await asyncio.gather(*tasks)
|
||||
|
||||
events = []
|
||||
|
||||
if not (html_data := [(html.text, html.url) for html in results if html]):
|
||||
return events
|
||||
|
||||
now = Time.clean(Time.now())
|
||||
|
||||
stateshot_ptrn = re.compile(r"var\s+stateshot\s+=\s+(.*);", re.I)
|
||||
|
||||
start_dt = now.delta(hours=-1)
|
||||
end_dt = now.delta(minutes=1)
|
||||
|
||||
for sport in api_data:
|
||||
data = api_data[sport]
|
||||
for content, url in html_data:
|
||||
sport = next((k for k, v in BASE_URLS.items() if v == url), "Live Event")
|
||||
|
||||
if not (match := stateshot_ptrn.search(content)):
|
||||
continue
|
||||
|
||||
data: dict = json.loads(f"{match[1]}")
|
||||
|
||||
teams = data.get("teams", {})
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ TAG = "WATCHFTY"
|
|||
|
||||
CACHE_FILE = Cache(TAG, exp=10_800)
|
||||
|
||||
BASE_DOMAIN = "watchfooty.st"
|
||||
BASE_DOMAIN = "watchfooty.ru"
|
||||
|
||||
API_URL, BASE_URL = f"https://api.{BASE_DOMAIN}", f"https://www.{BASE_DOMAIN}"
|
||||
|
||||
|
|
|
|||
10
readme.md
10
readme.md
|
|
@ -1,7 +1,13 @@
|
|||
## Base Log @ 2026-05-15 16:20 UTC
|
||||
## Base Log @ 2026-05-16 21:10 UTC
|
||||
|
||||
### ✅ Working Streams: 160<br>❌ Dead Streams: 0
|
||||
### ✅ Working Streams: 156<br>❌ Dead Streams: 4
|
||||
|
||||
| Channel | Error (Code) | Link |
|
||||
| ------- | ------------ | ---- |
|
||||
| ABC | HTTP Error (404) | `http://stream.cammonitorplus.net/1809/index.m3u8` |
|
||||
| Comedy TV | HTTP Error (403) | `http://realsport.scalecdn.co:8080/live/supersonicstreams/cUewZolveU8Jh18jk34BDJ/77411.ts` |
|
||||
| Fox | HTTP Error (404) | `http://stream.cammonitorplus.net/1752/index.m3u8` |
|
||||
| NBC | HTTP Error (404) | `http://stream.cammonitorplus.net/1812/index.m3u8` |
|
||||
---
|
||||
#### Base Channels URL
|
||||
```
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue