mirror of
https://github.com/doms9/iptv.git
synced 2026-06-16 12:56:26 +02:00
Compare commits
No commits in common. "448fbe17fa96617e0047cd44688e4a6058a28996" and "011230fc0f137c83f01c6c29d92f4f74967b58ae" have entirely different histories.
448fbe17fa
...
011230fc0f
8 changed files with 120626 additions and 116577 deletions
1842
M3U8/TV.m3u8
1842
M3U8/TV.m3u8
File diff suppressed because it is too large
Load diff
233430
M3U8/TV.xml
233430
M3U8/TV.xml
File diff suppressed because one or more lines are too long
|
|
@ -4,7 +4,7 @@
|
||||||
http://23.239.31.26:8989/aande/index.m3u8
|
http://23.239.31.26:8989/aande/index.m3u8
|
||||||
|
|
||||||
#EXTINF:-1 tvg-chno="2" tvg-id="WABC-DT.us_locals1" tvg-name="ABC" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10003_dark_360w_270h.png" group-title="TV",ABC
|
#EXTINF:-1 tvg-chno="2" tvg-id="WABC-DT.us_locals1" tvg-name="ABC" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10003_dark_360w_270h.png" group-title="TV",ABC
|
||||||
http://stream.cammonitorplus.net/1809/index.m3u8
|
http://realsport.scalecdn.co:8080/live/supersonicstreams/cUewZolveU8Jh18jk34BDJ/3606.ts
|
||||||
|
|
||||||
#EXTINF:-1 tvg-chno="3" tvg-id="ACC.Network.us2" tvg-name="ACC Network" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s111871_dark_360w_270h.png" group-title="TV",ACC Network
|
#EXTINF:-1 tvg-chno="3" tvg-id="ACC.Network.us2" tvg-name="ACC Network" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s111871_dark_360w_270h.png" group-title="TV",ACC Network
|
||||||
http://23.237.104.106:8080/USA_ACCN/mpegts
|
http://23.237.104.106:8080/USA_ACCN/mpegts
|
||||||
|
|
@ -64,7 +64,7 @@ http://realsport.scalecdn.co:8080/live/supersonicstreams/cUewZolveU8Jh18jk34BDJ/
|
||||||
http://23.237.104.106:8080/USA_CARTOON_NETWORK/index.m3u8
|
http://23.237.104.106:8080/USA_CARTOON_NETWORK/index.m3u8
|
||||||
|
|
||||||
#EXTINF:-1 tvg-chno="22" tvg-id="WCBS-DT.us_locals1" tvg-name="CBS" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10098_dark_360w_270h.png" group-title="TV",CBS
|
#EXTINF:-1 tvg-chno="22" tvg-id="WCBS-DT.us_locals1" tvg-name="CBS" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10098_dark_360w_270h.png" group-title="TV",CBS
|
||||||
http://stream.cammonitorplus.net/1810/index.m3u8
|
http://realsport.scalecdn.co:8080/live/supersonicstreams/cUewZolveU8Jh18jk34BDJ/89712.ts
|
||||||
|
|
||||||
#EXTINF:-1 tvg-chno="23" tvg-id="CBS.News.National.Stream.us2" tvg-name="CBS News 24/7" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s104846_dark_360w_270h.png" group-title="TV",CBS News 24/7
|
#EXTINF:-1 tvg-chno="23" tvg-id="CBS.News.National.Stream.us2" tvg-name="CBS News 24/7" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s104846_dark_360w_270h.png" group-title="TV",CBS News 24/7
|
||||||
https://cbsn-us.cbsnstream.cbsnews.com/out/v1/55a8648e8f134e82a470f83d562deeca/master.m3u8
|
https://cbsn-us.cbsnstream.cbsnews.com/out/v1/55a8648e8f134e82a470f83d562deeca/master.m3u8
|
||||||
|
|
@ -192,8 +192,8 @@ https://jmp2.uk/stvp-IN270000230
|
||||||
#EXTINF:-1 tvg-chno="64" tvg-id="Food.Network.HD.us2" tvg-name="Food Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s44718_dark_360w_270h.png" group-title="TV",Food Network
|
#EXTINF:-1 tvg-chno="64" tvg-id="Food.Network.HD.us2" tvg-name="Food Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s44718_dark_360w_270h.png" group-title="TV",Food Network
|
||||||
http://23.237.104.106:8080/USA_FOOD_NETWORK/index.m3u8
|
http://23.237.104.106:8080/USA_FOOD_NETWORK/index.m3u8
|
||||||
|
|
||||||
#EXTINF:-1 tvg-chno="65" tvg-id="WFLD-DT.us_locals1" tvg-name="Fox" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s28719_dark_360w_270h.png" group-title="TV",Fox
|
#EXTINF:-1 tvg-chno="65" tvg-id="WNYW-DT.us_locals1" tvg-name="Fox" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s28719_dark_360w_270h.png" group-title="TV",Fox
|
||||||
http://stream.cammonitorplus.net/1752/index.m3u8
|
http://realsport.scalecdn.co:8080/live/supersonicstreams/cUewZolveU8Jh18jk34BDJ/2544.ts
|
||||||
|
|
||||||
#EXTINF:-1 tvg-chno="66" tvg-id="Fox.Business.HD.us2" tvg-name="Fox Business" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s58649_dark_360w_270h.png" group-title="TV",Fox Business
|
#EXTINF:-1 tvg-chno="66" tvg-id="Fox.Business.HD.us2" tvg-name="Fox Business" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s58649_dark_360w_270h.png" group-title="TV",Fox Business
|
||||||
http://41.205.93.154/FOXBUSINESS/index.m3u8
|
http://41.205.93.154/FOXBUSINESS/index.m3u8
|
||||||
|
|
@ -304,7 +304,7 @@ http://realsport.scalecdn.co:8080/live/supersonicstreams/cUewZolveU8Jh18jk34BDJ/
|
||||||
http://23.237.104.106:8080/USA_NBA/tracks-v1a1/mono.m3u8
|
http://23.237.104.106:8080/USA_NBA/tracks-v1a1/mono.m3u8
|
||||||
|
|
||||||
#EXTINF:-1 tvg-chno="102" tvg-id="WNBC-DT.us_locals1" tvg-name="NBC" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10991_dark_360w_270h.png" group-title="TV",NBC
|
#EXTINF:-1 tvg-chno="102" tvg-id="WNBC-DT.us_locals1" tvg-name="NBC" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10991_dark_360w_270h.png" group-title="TV",NBC
|
||||||
http://stream.cammonitorplus.net/1812/index.m3u8
|
http://realsport.scalecdn.co:8080/live/supersonicstreams/cUewZolveU8Jh18jk34BDJ/2447.ts
|
||||||
|
|
||||||
#EXTINF:-1 tvg-chno="103" tvg-id="NBC.Sports.Bay.Area.HD.us2" tvg-name="NBC Sports Bay Area" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s63138_dark_360w_270h.png" group-title="TV",NBC Sports Bay Area
|
#EXTINF:-1 tvg-chno="103" tvg-id="NBC.Sports.Bay.Area.HD.us2" tvg-name="NBC Sports Bay Area" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s63138_dark_360w_270h.png" group-title="TV",NBC Sports Bay Area
|
||||||
http://realsport.scalecdn.co:8080/live/supersonicstreams/cUewZolveU8Jh18jk34BDJ/2436.ts
|
http://realsport.scalecdn.co:8080/live/supersonicstreams/cUewZolveU8Jh18jk34BDJ/2436.ts
|
||||||
|
|
@ -313,7 +313,7 @@ http://realsport.scalecdn.co:8080/live/supersonicstreams/cUewZolveU8Jh18jk34BDJ/
|
||||||
http://realsport.scalecdn.co:8080/live/supersonicstreams/cUewZolveU8Jh18jk34BDJ/2435.ts
|
http://realsport.scalecdn.co:8080/live/supersonicstreams/cUewZolveU8Jh18jk34BDJ/2435.ts
|
||||||
|
|
||||||
#EXTINF:-1 tvg-chno="105" tvg-id="NBC.Sports.California.SAT.us2" tvg-name="NBC Sports California" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s45540_dark_360w_270h.png" group-title="TV",NBC Sports California
|
#EXTINF:-1 tvg-chno="105" tvg-id="NBC.Sports.California.SAT.us2" tvg-name="NBC Sports California" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s45540_dark_360w_270h.png" group-title="TV",NBC Sports California
|
||||||
http://stream.cammonitorplus.net/1795/index.m3u8
|
http://realsport.scalecdn.co:8080/live/supersonicstreams/cUewZolveU8Jh18jk34BDJ/3821.ts
|
||||||
|
|
||||||
#EXTINF:-1 tvg-chno="106" tvg-id="a90a91570ce0536cbb22b591ad7e0da2" tvg-name="NBC Sports NOW" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s114140_dark_360w_270h.png" group-title="TV",NBC Sports NOW
|
#EXTINF:-1 tvg-chno="106" tvg-id="a90a91570ce0536cbb22b591ad7e0da2" tvg-name="NBC Sports NOW" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s114140_dark_360w_270h.png" group-title="TV",NBC Sports NOW
|
||||||
https://jmp2.uk/stvp-USBD420002446
|
https://jmp2.uk/stvp-USBD420002446
|
||||||
|
|
|
||||||
1830
M3U8/events.m3u8
1830
M3U8/events.m3u8
File diff suppressed because it is too large
Load diff
|
|
@ -6,6 +6,7 @@ from pathlib import Path
|
||||||
from playwright.async_api import async_playwright
|
from playwright.async_api import async_playwright
|
||||||
from scrapers import (
|
from scrapers import (
|
||||||
cdnlivetv,
|
cdnlivetv,
|
||||||
|
dami,
|
||||||
embedhd,
|
embedhd,
|
||||||
fawa,
|
fawa,
|
||||||
fsports,
|
fsports,
|
||||||
|
|
@ -65,6 +66,7 @@ async def main() -> None:
|
||||||
]
|
]
|
||||||
|
|
||||||
httpx_tasks = [
|
httpx_tasks = [
|
||||||
|
# asyncio.create_task(dami.scrape()),
|
||||||
asyncio.create_task(fawa.scrape()),
|
asyncio.create_task(fawa.scrape()),
|
||||||
asyncio.create_task(istreameast.scrape()),
|
asyncio.create_task(istreameast.scrape()),
|
||||||
asyncio.create_task(mainportal.scrape()),
|
asyncio.create_task(mainportal.scrape()),
|
||||||
|
|
@ -93,6 +95,7 @@ async def main() -> None:
|
||||||
|
|
||||||
additions = (
|
additions = (
|
||||||
cdnlivetv.urls
|
cdnlivetv.urls
|
||||||
|
| dami.urls
|
||||||
| embedhd.urls
|
| embedhd.urls
|
||||||
| fawa.urls
|
| fawa.urls
|
||||||
| fsports.urls
|
| fsports.urls
|
||||||
|
|
|
||||||
80
M3U8/scrapers/dami.py
Normal file
80
M3U8/scrapers/dami.py
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
from .utils import Cache, Time, get_logger, leagues, network
|
||||||
|
|
||||||
|
log = get_logger(__name__)
|
||||||
|
|
||||||
|
urls: dict[str, dict[str, str | float]] = {}
|
||||||
|
|
||||||
|
TAG = "DAMI"
|
||||||
|
|
||||||
|
CACHE_FILE = Cache(TAG, exp=28_800)
|
||||||
|
|
||||||
|
API_URL = "https://api.ppv.to/api/streams"
|
||||||
|
# "https://api.ppv.cx/api/streams"
|
||||||
|
# "https://api.ppv.sh/api/streams"
|
||||||
|
|
||||||
|
|
||||||
|
async def get_events() -> dict[str, dict[str, str | float]]:
|
||||||
|
now = Time.clean(Time.now())
|
||||||
|
|
||||||
|
events = {}
|
||||||
|
|
||||||
|
if not (r := await network.request(API_URL, log=log)):
|
||||||
|
return events
|
||||||
|
|
||||||
|
api_data: dict[str, dict] = r.json()
|
||||||
|
|
||||||
|
for stream_group in api_data.get("streams", []):
|
||||||
|
sport = stream_group["category"]
|
||||||
|
|
||||||
|
if sport == "24/7 Streams":
|
||||||
|
continue
|
||||||
|
|
||||||
|
for event in stream_group.get("streams", []):
|
||||||
|
name = event.get("name")
|
||||||
|
|
||||||
|
start_ts = event.get("starts_at")
|
||||||
|
|
||||||
|
logo = event.get("poster")
|
||||||
|
|
||||||
|
uri_name = event.get("uri_name")
|
||||||
|
|
||||||
|
if not (name and start_ts and uri_name):
|
||||||
|
continue
|
||||||
|
|
||||||
|
event_dt = Time.from_ts(start_ts)
|
||||||
|
|
||||||
|
if event_dt.date() != now.date():
|
||||||
|
continue
|
||||||
|
|
||||||
|
key = f"[{sport}] {name} ({TAG})"
|
||||||
|
|
||||||
|
tvg_id, pic = leagues.get_tvg_info(sport, name)
|
||||||
|
|
||||||
|
events[key] = {
|
||||||
|
"url": f"https://dami-tv.pro/live-hls/channel/{uri_name}/playlist.m3u8",
|
||||||
|
"logo": logo or pic,
|
||||||
|
"base": f"https://dami-tv.pro/player/auto/?match={uri_name}",
|
||||||
|
"timestamp": now.timestamp(),
|
||||||
|
"id": tvg_id or "Live.Event.us",
|
||||||
|
}
|
||||||
|
|
||||||
|
return events
|
||||||
|
|
||||||
|
|
||||||
|
async def scrape() -> None:
|
||||||
|
if cached_urls := CACHE_FILE.load():
|
||||||
|
urls.update(cached_urls)
|
||||||
|
|
||||||
|
log.info(f"Loaded {len(urls)} event(s) from cache")
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
log.info(f'Scraping from "{API_URL}"')
|
||||||
|
|
||||||
|
events = await get_events()
|
||||||
|
|
||||||
|
urls.update(events)
|
||||||
|
|
||||||
|
log.info(f"Collected and cached {len(urls)} event(s)")
|
||||||
|
|
||||||
|
CACHE_FILE.write(urls)
|
||||||
|
|
@ -47,6 +47,8 @@ class Network:
|
||||||
|
|
||||||
self.client = httpx.AsyncClient(**client_params)
|
self.client = httpx.AsyncClient(**client_params)
|
||||||
|
|
||||||
|
self.unvd_client = httpx.AsyncClient(**client_params, verify=False)
|
||||||
|
|
||||||
async def request(
|
async def request(
|
||||||
self,
|
self,
|
||||||
url: str,
|
url: str,
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
## Base Log @ 2026-05-15 16:20 UTC
|
## Base Log @ 2026-05-14 16:25 UTC
|
||||||
|
|
||||||
### ✅ Working Streams: 160<br>❌ Dead Streams: 0
|
### ✅ Working Streams: 160<br>❌ Dead Streams: 0
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue