Compare commits

..

35 commits

Author SHA1 Message Date
GitHub Actions Bot
8d4d6c5751 update M3U8 2026-01-02 18:31:02 -05:00
GitHub Actions Bot
b077b7db65 update M3U8 2026-01-02 18:00:52 -05:00
GitHub Actions Bot
a4d3d20528 update M3U8 2026-01-02 17:30:14 -05:00
GitHub Actions Bot
0429cb0805 update M3U8 2026-01-02 17:00:54 -05:00
GitHub Actions Bot
3ff690d637 update M3U8 2026-01-02 16:31:19 -05:00
GitHub Actions Bot
47bcdd1e40 update M3U8 2026-01-02 16:01:15 -05:00
doms9
00000d9cd4 e
update streamhub caching
2026-01-02 15:42:36 -05:00
GitHub Actions Bot
501a8d2847 update M3U8 2026-01-02 15:31:14 -05:00
GitHub Actions Bot
146b248d6f update M3U8 2026-01-02 15:02:27 -05:00
GitHub Actions Bot
100ba1de00 update M3U8 2026-01-02 14:31:44 -05:00
GitHub Actions Bot
ebf4e87d1c update M3U8 2026-01-02 14:01:58 -05:00
GitHub Actions Bot
bca4b1e697 update EPG 2026-01-02 18:56:54 +00:00
GitHub Actions Bot
bfa2278017 update M3U8 2026-01-02 13:32:07 -05:00
GitHub Actions Bot
99ed70b40d update M3U8 2026-01-02 13:02:27 -05:00
GitHub Actions Bot
91113f8bcc health log 2026-01-02 12:36:58 -05:00
GitHub Actions Bot
8d60656c5e update M3U8 2026-01-02 12:02:22 -05:00
GitHub Actions Bot
edac57a177 update M3U8 2026-01-02 11:01:07 -05:00
GitHub Actions Bot
2d9cf9c04f update M3U8 2026-01-02 10:00:48 -05:00
GitHub Actions Bot
6e7d6bd886 health log 2026-01-02 14:43:08 +00:00
GitHub Actions Bot
6904e0fa95 update M3U8 2026-01-02 09:01:06 -05:00
GitHub Actions Bot
222e517ef4 update M3U8 2026-01-02 08:01:51 -05:00
GitHub Actions Bot
e24a475845 update EPG 2026-01-02 10:52:30 +00:00
GitHub Actions Bot
5d632c26b1 health log 2026-01-02 08:50:21 +00:00
GitHub Actions Bot
0f7eddd923 update M3U8 2026-01-01 23:30:39 -05:00
GitHub Actions Bot
9587ca3f2c update M3U8 2026-01-01 23:01:14 -05:00
GitHub Actions Bot
f32df7e27a update EPG 2026-01-02 03:55:18 +00:00
GitHub Actions Bot
3998a71038 health log 2026-01-02 03:51:11 +00:00
GitHub Actions Bot
e91b812205 update M3U8 2026-01-01 22:30:42 -05:00
GitHub Actions Bot
8b54ee247a update M3U8 2026-01-01 22:01:04 -05:00
GitHub Actions Bot
85bf4d653c update M3U8 2026-01-01 21:30:54 -05:00
GitHub Actions Bot
cee3c7aa76 update M3U8 2026-01-01 21:01:14 -05:00
GitHub Actions Bot
0d2f78d556 update M3U8 2026-01-01 20:31:38 -05:00
GitHub Actions Bot
9a5de3d581 update M3U8 2026-01-01 20:01:43 -05:00
GitHub Actions Bot
1360f0d3cc update M3U8 2026-01-01 19:30:30 -05:00
GitHub Actions Bot
2027e28087 update M3U8 2026-01-01 19:01:57 -05:00
8 changed files with 89484 additions and 89328 deletions

174793
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,7 +21,7 @@ BASE_URL = "https://roxiestreams.live"
SPORT_ENDPOINTS = { SPORT_ENDPOINTS = {
"fighting": "Fighting", "fighting": "Fighting",
"mlb": "MLB", # "mlb": "MLB",
"motorsports": "Racing", "motorsports": "Racing",
"nba": "NBA", "nba": "NBA",
"nfl": "American Football", "nfl": "American Football",

View file

@ -24,12 +24,12 @@ CATEGORIES = {
"American Football": "sport_68c02a4465113", "American Football": "sport_68c02a4465113",
# "Baseball": "sport_68c02a446582f", # "Baseball": "sport_68c02a446582f",
"Basketball": "sport_68c02a4466011", "Basketball": "sport_68c02a4466011",
# "Cricket": "sport_68c02a44669f3", "Cricket": "sport_68c02a44669f3",
"Hockey": "sport_68c02a4466f56", "Hockey": "sport_68c02a4466f56",
"MMA": "sport_68c02a44674e9", "MMA": "sport_68c02a44674e9",
"Racing": "sport_68c02a4467a48", "Racing": "sport_68c02a4467a48",
# "Rugby": "sport_68c02a4467fc1", # "Rugby": "sport_68c02a4467fc1",
# "Tennis": "sport_68c02a4468cf7", "Tennis": "sport_68c02a4468cf7",
# "Volleyball": "sport_68c02a4469422", # "Volleyball": "sport_68c02a4469422",
} }
@ -135,9 +135,11 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
async def scrape() -> None: async def scrape() -> None:
cached_urls = CACHE_FILE.load() 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") log.info(f"Loaded {cached_count} event(s) from cache")
@ -169,34 +171,38 @@ async def scrape() -> None:
log=log, log=log,
) )
sport, event, logo, link, ts = (
ev["sport"],
ev["event"],
ev["logo"],
ev["link"],
ev["event_ts"],
)
key = f"[{sport}] {event} ({TAG})"
tvg_id, pic = leagues.get_tvg_info(sport, event)
entry = {
"url": url,
"logo": logo or pic,
"base": "https://storytrench.net/",
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,
}
cached_urls[key] = entry
if url: if url:
sport, event, logo, link, ts = ( valid_count += 1
ev["sport"],
ev["event"],
ev["logo"],
ev["link"],
ev["event_ts"],
)
key = f"[{sport}] {event} ({TAG})" urls[key] = entry
tvg_id, pic = leagues.get_tvg_info(sport, event)
entry = {
"url": url,
"logo": logo or pic,
"base": "https://storytrench.net/",
"timestamp": ts,
"id": tvg_id or "Live.Event.us",
"link": link,
}
urls[key] = cached_urls[key] = entry
finally: finally:
await browser.close() await browser.close()
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)") log.info(f"Collected and cached {new_count} new event(s)")
else: else:

View file

@ -549,7 +549,7 @@
{ {
"LIGUE 1": { "LIGUE 1": {
"logo": "https://ligue1.com/images/Logo_Ligue_1.webp", "logo": "https://ligue1.com/images/Logo_Ligue_1.webp",
"names": ["FRANCE LIGUE 1", "FRENCH LIGUE 1"] "names": ["FRANCE LIGUE 1", "FRENCH LIGUE 1", "LIGUE 1 FRANCE"]
} }
}, },
{ {
@ -591,7 +591,11 @@
{ {
"PRIMEIRA LIGA": { "PRIMEIRA LIGA": {
"logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/14.png", "logo": "https://a.espncdn.com/combiner/i?img=/i/leaguelogos/soccer/500/14.png",
"names": ["LIGA PORTUGAL", "PORTUGUESE PRIMEIRA LIGA"] "names": [
"LIGA PORTUGAL",
"PORTUGAL PRIMEIRA LIGA",
"PORTUGUESE PRIMEIRA LIGA"
]
} }
}, },
{ {

View file

@ -32,16 +32,16 @@ VALID_SPORTS = [
# "australian-football", # "australian-football",
# "baseball", # "baseball",
"basketball", "basketball",
# "cricket", "cricket",
# "darts", "darts",
"fighting", "fighting",
"football", "football",
"golf", "golf",
"hockey", "hockey",
"racing", "racing",
# "rugby", # "rugby",
# "tennis", "tennis",
# "volleyball", "volleyball",
] ]

View file

@ -1,15 +1,10 @@
## Base Log @ 2026-01-01 20:43 UTC ## Base Log @ 2026-01-02 17:36 UTC
### ✅ Working Streams: 140<br>❌ Dead Streams: 6 ### ✅ Working Streams: 145<br>❌ Dead Streams: 1
| Channel | Error (Code) | Link | | Channel | Error (Code) | Link |
| ------- | ------------ | ---- | | ------- | ------------ | ---- |
| Bounce TV | HTTP Error (404) | `http://fl1.moveonjoy.com/BOUNCE_TV/index.m3u8` | | BET | HTTP Error (404) | `http://fl1.moveonjoy.com/BET_EAST/index.m3u8` |
| FX Movie Channel | HTTP Error (404) | `http://fl1.moveonjoy.com/FX_MOVIE/index.m3u8` |
| HBO Family | HTTP Error (404) | `https://fl1.moveonjoy.com/HBO_FAMILY/index.m3u8` |
| HBO | HTTP Error (404) | `http://fl1.moveonjoy.com/HBO/index.m3u8` |
| Hallmark Channel | HTTP Error (404) | `http://fl1.moveonjoy.com/HALLMARK_CHANNEL/index.m3u8` |
| Root Sports | HTTP Error (403) | `http://cord-cutter.net:8080/k4Svp2/645504/85232` |
--- ---
#### Base Channels URL #### Base Channels URL
``` ```