]>
jfr.im git - yt-dlp.git/blob - yt_dlp/extractor/newstube.py
4 from .common
import InfoExtractor
5 from ..aes
import aes_cbc_decrypt_bytes
, unpad_pkcs7
13 class NewstubeIE(InfoExtractor
):
14 _VALID_URL
= r
'https?://(?:www\.)?newstube\.ru/media/(?P<id>.+)'
16 'url': 'http://www.newstube.ru/media/telekanal-cnn-peremestil-gorod-slavyansk-v-krym',
17 'md5': '9d10320ad473444352f72f746ccb8b8c',
19 'id': '728e0ef2-e187-4012-bac0-5a081fdcb1f6',
21 'title': 'Телеканал CNN переместил город Славянск в Крым',
22 'description': 'md5:419a8c9f03442bc0b0a794d689360335',
27 def _real_extract(self
, url
):
28 video_id
= self
._match
_id
(url
)
30 page
= self
._download
_webpage
(url
, video_id
)
31 title
= self
._html
_search
_meta
(['og:title', 'twitter:title'], page
, fatal
=True)
33 video_guid
= self
._html
_search
_regex
(
34 r
'<meta\s+property="og:video(?::(?:(?:secure_)?url|iframe))?"\s+content="https?://(?:www\.)?newstube\.ru/embed/(?P<guid>[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12})',
37 enc_data
= base64
.b64decode(self
._download
_webpage
(
38 'https://www.newstube.ru/embed/api/player/getsources2',
43 key
= hashlib
.pbkdf2_hmac(
44 'sha1', video_guid
.replace('-', '').encode(), enc_data
[:16], 1)[:16]
45 dec_data
= unpad_pkcs7(aes_cbc_decrypt_bytes(enc_data
[32:], key
, enc_data
[16:32]))
46 sources
= self
._parse
_json
(dec_data
, video_guid
)
49 for source
in sources
:
50 source_url
= source
.get('Src')
53 height
= int_or_none(source
.get('Height'))
55 'format_id': 'http' + ('-%dp' % height
if height
else ''),
57 'width': int_or_none(source
.get('Width')),
60 source_type
= source
.get('Type')
62 f
.update(parse_codecs(self
._search
_regex
(
63 r
'codecs="([^"]+)"', source_type
, 'codecs', fatal
=False)))
66 self
._check
_formats
(formats
, video_guid
)
67 self
._sort
_formats
(formats
)
72 'description': self
._html
_search
_meta
(['description', 'og:description'], page
),
73 'thumbnail': self
._html
_search
_meta
(['og:image:secure_url', 'og:image', 'twitter:image'], page
),
74 'duration': parse_duration(self
._html
_search
_meta
('duration', page
)),