mirror of
https://github.com/doms9/iptv.git
synced 2026-06-06 02:43:05 +02:00
80 lines
1.9 KiB
Python
80 lines
1.9 KiB
Python
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)
|