From a85e77a058e4de7c30cea1d371ea75ac448d9876 Mon Sep 17 00:00:00 2001 From: voidptr_t Date: Sun, 4 Aug 2024 19:10:44 +0300 Subject: [PATCH] =?UTF-8?q?[PlVideo=20(=D0=9F=D0=BB=D0=B0=D1=82=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B0)]=20Add=20extractor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yt_dlp/extractor/_extractors.py | 1 + yt_dlp/extractor/plvideo.py | 55 +++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 yt_dlp/extractor/plvideo.py diff --git a/yt_dlp/extractor/_extractors.py b/yt_dlp/extractor/_extractors.py index 9b73fcd75e..19ba298310 100644 --- a/yt_dlp/extractor/_extractors.py +++ b/yt_dlp/extractor/_extractors.py @@ -1601,6 +1601,7 @@ ) from .puls4 import Puls4IE from .pyvideo import PyvideoIE +from .plvideo import PlVideoVideoIE from .qdance import QDanceIE from .qingting import QingTingIE from .qqmusic import ( diff --git a/yt_dlp/extractor/plvideo.py b/yt_dlp/extractor/plvideo.py new file mode 100644 index 0000000000..d052e48bd1 --- /dev/null +++ b/yt_dlp/extractor/plvideo.py @@ -0,0 +1,55 @@ + +from pprint import pprint +from yt_dlp.extractor.common import InfoExtractor + + +class PlVideoVideoIE(InfoExtractor): + _VALID_URL = r'https?://(?:www\.)?plvideo\.ru/watch\?v=(?P\w+)&?(.+)?' # type: ignore + _TESTS = [ + { + 'url': 'https://plvideo.ru/watch?v=lYmu2gcUKOa9', + 'info_dict': { + 'id': 'lYmu2gcUKOa9', + 'ext': 'mp4', + 'title': 'test', + } + } + ] + + def _real_extract(self, url): + video_id = self._match_id(url) + api_url = f"https://api.g1.plvideo.ru/v1/videos/{video_id}?Aud=18" + + result = self._download_json(api_url, video_id, "Downloading video JSON") + assert result["code"] == 200, "Failed to download video JSON" + + item = result["item"] + assert item is not None, "Bad API response" + + thumbnail = item["cover"]["paths"]["original"]["src"] + + formats = [] + + for key, value in item["profiles"].items(): + hlsurl = value["hls"] + fmt = { + 'url': hlsurl, + 'ext': 'mp4', + 'quality': 0 if len(formats) == 0 else 0 - len(formats), + 'thumbnail': thumbnail, + 'format_id': key, + 'protocol': 'm3u8_native' + } + + formats.append(fmt) + + + return { + 'id': video_id, + 'title': item["title"], + 'formats': formats, + } + + + +