[PlVideo (Платформа)] Add extractor

This commit is contained in:
voidptr_t 2024-08-04 19:10:44 +03:00
parent 919540a964
commit a85e77a058
2 changed files with 56 additions and 0 deletions

View File

@ -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 (

View File

@ -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<id>\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,
}