pull/14438/merge
Alex Karabanov 1 day ago committed by GitHub
commit 2096659773
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -1916,6 +1916,7 @@ from .spankbang import (
SpankBangPlaylistIE, SpankBangPlaylistIE,
) )
from .spiegel import SpiegelIE from .spiegel import SpiegelIE
from .sponsr import SponsrIE
from .sport5 import Sport5IE from .sport5 import Sport5IE
from .sportbox import SportBoxIE from .sportbox import SportBoxIE
from .sportdeutschland import SportDeutschlandIE from .sportdeutschland import SportDeutschlandIE

@ -0,0 +1,33 @@
from .common import InfoExtractor
from ..utils import (
ExtractorError,
traverse_obj,
)
class KinescopeBaseIE(InfoExtractor):
def _get_video_info(self, media_id, token, fatal=False, **kwargs):
headers = {'Authorization': f'Bearer {token}', 'Content-Type': 'application/json'}
video_info = self._download_json(f'https://api.kinescope.io/v1/videos/{media_id}',
media_id, fatal=fatal, headers=headers, **kwargs)
if traverse_obj(video_info, 'error'):
raise self._error_or_warning(ExtractorError(
f'Kinescope said: {video_info["error"]}', expected=True), fatal=fatal)
return video_info or {}
def _get_formats(self, video_info, fatal=False, **kwargs):
if traverse_obj(video_info, 'error'):
raise self._error_or_warning(ExtractorError(
f'Kinescope said: {video_info["error"]}', expected=True), fatal=fatal)
else:
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 formats or {}

@ -0,0 +1,64 @@
from .kinescope import KinescopeBaseIE
from ..utils import (
traverse_obj,
)
class SponsrIE(KinescopeBaseIE):
_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': 'Россия строит завод полупроводников в космосе. Эксперимент начался!',
'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': 'Россия за неделю: мегатурбина, новый реактор, спутники, беспилотник и другие чудеса техники',
'description': 'Россия за неделю: мегатурбина, новый реактор, спутники, беспилотник и другие чудеса техники. О позитивных достижениях России в сфере экономики, науки и о подвигах наших соотечественников',
},
}, {
'url': 'https://sponsr.ru/savvateev/114618/ZADACHKI_IZ_BROSHURY_KOLMOGOROVA__PRODOLJENIE/',
'md5': 'b70e84d53fbbd1144230e30207b57e7d',
'info_dict': {
'id': '114618',
'ext': 'mp4',
'title': 'ЗАДАЧКИ ИЗ БРОШЮРЫ КОЛМОГОРОВА - ПРОДОЛЖЕНИЕ!',
'description': 'ЗАДАЧКИ ИЗ БРОШЮРЫ КОЛМОГОРОВА - ПРОДОЛЖЕНИЕ!. Алексей Савватеев — популяризатор математики и пламенный борец за улучшение школьного образования. Лекции, выступления, новости',
},
},
]
def _real_extract(self, url):
video_id = self._match_id(url)
webpage = self._download_webpage(url, video_id)
media_id = self._search_regex(
r'<iframe[^>]+?src=(["\'])(?:https?:)?//(?:www\.)?kinescope\.io/[^"]+"\s*data-url=(["\'])/post/video/\?video_id=(?P<media_id>[^\?]+)[^>]+>', webpage, 'media_id', group='media_id')
token = traverse_obj(self._search_nextjs_data(webpage, video_id), ('props', 'pageProps', 'project', 'project_kinescope_token'))
video_info = self._get_video_info(media_id, token, fatal=True, note='Get video info')
formats = self._get_formats(video_info, fatal=True, note='Get formats')
return {
'id': video_id,
'title': self._og_search_title(webpage).split('|', 1)[0].strip(),
'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