[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 .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 (

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,
}