diff --git a/src/dlhdhr/dlhd/__init__.py b/src/dlhdhr/dlhd/__init__.py index 15560d5..f3f00fc 100644 --- a/src/dlhdhr/dlhd/__init__.py +++ b/src/dlhdhr/dlhd/__init__.py @@ -20,11 +20,13 @@ class DLHDClient: _channels: dict[str, DLHDChannel] _channels_last_fetch: float = 0 _base_urls: dict[DLHDChannel, (float, str)] + _referers: dict[DLHDChannel, str] _cookies: dict[str, str] def __init__(self): self._channels = {} self._base_urls = {} + self._referers = {} self._cookies = {} async def _log_request(self, request): @@ -40,7 +42,7 @@ class DLHDClient: def _get_client(self, referer: str = ""): headers = { - "User-Agent": "", + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0", "Referer": referer, } return httpx.AsyncClient( @@ -62,11 +64,22 @@ class DLHDClient: return channel return None + async def get_channel_referer(self, channel: DLHDChannel) -> str: + if channel not in self._referers: + base_url = f"https://weblivehdplay.ru/premiumtv/daddyhd.php?id={channel.number}" + referer = f"https://dlhd.sx/stream/stream-{channel.number}.php" + async with self._get_client(referer=referer) as client: + res = await client.get(base_url, follow_redirects=True) + res.raise_for_status() + self._referers[channel] = str(res.request.url) + return self._referers[channel] + async def get_channel_playlist(self, channel: DLHDChannel) -> m3u8.M3U8: base_url = f"https://weblivehdplay.ru/premiumtv/daddyhd.php?id={channel.number}" - referer = base_url + referer = f"https://dlhd.sx/stream/stream-{channel.number}.php" + async with self._get_client(referer=referer) as client: - res = await client.get(referer, follow_redirects=True) + res = await client.get(base_url, follow_redirects=True) res.raise_for_status() referer = str(res.request.url) @@ -126,7 +139,7 @@ class DLHDClient: return mono_playlist async def get_channel_key(self, channel: DLHDChannel, proxy_url: str) -> bytes: - referer = f"https://weblivehdplay.ru/premiumtv/daddyhd.php?id={channel.number}" + referer = await self.get_channel_referer(channel) async with self._get_client(referer=referer) as client: res = await client.get(proxy_url) res.raise_for_status() @@ -147,7 +160,7 @@ class DLHDClient: return base_url async def stream_segment(self, channel: DLHDChannel, segment_path: str): - referer = "https://claplivehdplay.ru/" + referer = await self.get_channel_referer(channel) base_url = await self.get_channel_base_url(channel) segment_url = urllib.parse.urljoin(base_url, segment_path)