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

pull/10657/head
voidptr_t 6 months ago
parent 919540a964
commit a85e77a058

@ -1601,6 +1601,7 @@ from .puhutv import (
) )
from .puls4 import Puls4IE from .puls4 import Puls4IE
from .pyvideo import PyvideoIE from .pyvideo import PyvideoIE
from .plvideo import PlVideoVideoIE
from .qdance import QDanceIE from .qdance import QDanceIE
from .qingting import QingTingIE from .qingting import QingTingIE
from .qqmusic import ( from .qqmusic import (

@ -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,
}
Loading…
Cancel
Save