[ie/kinescope] Add extractor

pull/14414/head
Alex Karabanov 3 days ago
parent 2685654a37
commit 9638771e48
No known key found for this signature in database

@ -967,6 +967,7 @@ from .kika import (
KikaIE, KikaIE,
KikaPlaylistIE, KikaPlaylistIE,
) )
from .kinescope import KinescopeIE
from .kinja import KinjaEmbedIE from .kinja import KinjaEmbedIE
from .kinopoisk import KinoPoiskIE from .kinopoisk import KinoPoiskIE
from .kommunetv import KommunetvIE from .kommunetv import KommunetvIE

@ -0,0 +1,92 @@
import re
from .common import InfoExtractor
from ..utils import (
ExtractorError,
traverse_obj,
)
class KinescopeIE(InfoExtractor):
_DOMAINS = (
'sponsr.ru',
)
_VALID_URL = rf'''(?x)
https?://(?:www\.)?(?P<host>{"|".join(map(re.escape, _DOMAINS))})/
(?:[^/]+)/(?P<id>\d+)(?:/([^/?#]+))?
'''
# _VALID_URL = r'https?://(?:www\.)?sponsr\.ru/(?:[^/]+)/(?P<id>[0-9]+)'
_TESTS = [{
'url': 'https://sponsr.ru/vpered/114539/Rossiya_stroit_zavod_poluprovodnikov_vkosmose_Eksperiment_nachalsya',
'md5': 'f94e07364c18df48b65903255123cc06',
'info_dict': {
'id': '114539',
'ext': 'mp4',
'title': 'Россия строит завод полупроводников в космосе. Эксперимент начался! | Время - вперёд! | Sponsr',
'description': 'Россия строит завод полупроводников в космосе. Эксперимент начался!. О позитивных достижениях России в сфере экономики, науки и о подвигах наших соотечественников',
},
}, {
'url': 'https://sponsr.ru/vpered/113655/Rossiya_zanedelu_megaturbina_novyi_reaktor_sputniki_bespilotnik_idrugie_chudesa_tehniki',
'md5': '763cad7f406cf35c5169ec95fcbd637f',
'info_dict': {
'id': '113655',
'ext': 'mp4',
'title': 'Россия за неделю: мегатурбина, новый реактор, спутники, беспилотник и другие чудеса техники | Время - вперёд! | Sponsr',
'description': 'Россия за неделю: мегатурбина, новый реактор, спутники, беспилотник и другие чудеса техники. О позитивных достижениях России в сфере экономики, науки и о подвигах наших соотечественников',
},
}, {
'url': 'https://sponsr.ru/savvateev/114618/ZADACHKI_IZ_BROSHURY_KOLMOGOROVA__PRODOLJENIE/',
'md5': 'b70e84d53fbbd1144230e30207b57e7d',
'info_dict': {
'id': '114618',
'ext': 'mp4',
'title': 'ЗАДАЧКИ ИЗ БРОШЮРЫ КОЛМОГОРОВА - ПРОДОЛЖЕНИЕ! | Маткульт-привет! | Sponsr',
'description': 'ЗАДАЧКИ ИЗ БРОШЮРЫ КОЛМОГОРОВА - ПРОДОЛЖЕНИЕ!. Алексей Савватеев — популяризатор математики и пламенный борец за улучшение школьного образования. Лекции, выступления, новости',
},
},
]
def _call_api(self, url, video_id, fatal=False, **kwargs):
content = self._download_json(url, video_id, fatal=fatal, **kwargs)
if traverse_obj(content, 'error'):
raise self._error_or_warning(ExtractorError(
f'Kinescope said: {content["error"]}', expected=True), fatal=fatal)
return content or {}
def _real_extract(self, url):
video_id = self._match_id(url)
webpage = self._download_webpage(url, video_id)
media_id = self._html_search_regex(r'video_id=(.+?)\?', webpage, 'media_id')
token = traverse_obj(self._search_nextjs_data(webpage, video_id), ('props', 'pageProps', 'project', 'project_kinescope_token'))
headers = {'Authorization': f'Bearer {token}', 'Content-Type': 'application/json'}
video_info = self._call_api(
f'https://api.kinescope.io/v1/videos/{media_id}', media_id, fatal=True,
note='Downloading video file info', headers=headers)
formats = []
for item in traverse_obj(video_info, ('data', 'assets')):
formats.append({
'url': item.get('download_link'),
'format_id': item.get('quality'),
'ext': item.get('filetype'),
'resolution': item.get('resolution'),
})
return {
'id': video_id,
'title': self._og_search_title(webpage),
'description': self._og_search_description(webpage),
'formats': formats,
# 'uploader': self._search_regex(r'<div[^>]+id="uploader"[^>]*>([^<]+)<', webpage, 'uploader', fatal=False),
# TODO: more properties (see yt_dlp/extractor/common.py)
}
Loading…
Cancel
Save