|
|
@ -2,6 +2,7 @@ import re
|
|
|
|
|
|
|
|
|
|
|
|
from .common import InfoExtractor
|
|
|
|
from .common import InfoExtractor
|
|
|
|
from ..utils import ExtractorError, int_or_none
|
|
|
|
from ..utils import ExtractorError, int_or_none
|
|
|
|
|
|
|
|
from ..utils.traversal import traverse_obj
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SmotrimIE(InfoExtractor):
|
|
|
|
class SmotrimIE(InfoExtractor):
|
|
|
@ -126,24 +127,19 @@ class SmotrimIE(InfoExtractor):
|
|
|
|
raise ExtractorError(str(e), expected=True)
|
|
|
|
raise ExtractorError(str(e), expected=True)
|
|
|
|
if json_info.get('status') != 200:
|
|
|
|
if json_info.get('status') != 200:
|
|
|
|
raise ExtractorError('Json download error. Status code: %s' % str(json_info.get('status')), expected=True)
|
|
|
|
raise ExtractorError('Json download error. Status code: %s' % str(json_info.get('status')), expected=True)
|
|
|
|
try:
|
|
|
|
media_info = traverse_obj(json_info, ('data', 'playlist', 'medialist', 0))
|
|
|
|
media_info = json_info.get('data').get('playlist').get('medialist')[0]
|
|
|
|
if not media_info:
|
|
|
|
except (KeyError, AttributeError, TypeError) as e:
|
|
|
|
raise ExtractorError('Unable to get media_info', expected=True)
|
|
|
|
raise ExtractorError('media_info get error: %s' % str(e), expected=True)
|
|
|
|
formats, subtitles = self._extract_m3u8_formats_and_subtitles(
|
|
|
|
try:
|
|
|
|
traverse_obj(media_info, ('sources', 'm3u8', 'auto')), video_id, 'mp4', m3u8_id='hls',
|
|
|
|
formats, subtitles = self._extract_m3u8_formats_and_subtitles(
|
|
|
|
)
|
|
|
|
media_info.get('sources').get('m3u8').get('auto'), video_id, 'mp4', m3u8_id='hls',
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
res = {
|
|
|
|
|
|
|
|
'id': video_id,
|
|
|
|
|
|
|
|
'title': media_info.get('title'),
|
|
|
|
|
|
|
|
'thumbnail': media_info.get('pictures').get('16:9'),
|
|
|
|
|
|
|
|
'formats': formats,
|
|
|
|
|
|
|
|
'subtitles': subtitles,
|
|
|
|
|
|
|
|
'is_live': json_info.get('data').get('playlist').get('type') == 'live',
|
|
|
|
|
|
|
|
'duration': int_or_none(media_info.get('duration')),
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
except (KeyError, AttributeError, TypeError) as e:
|
|
|
|
|
|
|
|
raise ExtractorError('Result error: %s' % str(e), expected=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return res
|
|
|
|
return {
|
|
|
|
|
|
|
|
'id': video_id,
|
|
|
|
|
|
|
|
'title': traverse_obj(media_info, ('title')),
|
|
|
|
|
|
|
|
'thumbnail': traverse_obj(media_info, ('pictures', '16:9')),
|
|
|
|
|
|
|
|
'formats': formats,
|
|
|
|
|
|
|
|
'subtitles': subtitles,
|
|
|
|
|
|
|
|
'is_live': traverse_obj(json_info, ('data', 'playlist', 'type')) == 'live',
|
|
|
|
|
|
|
|
'duration': int_or_none(traverse_obj(media_info, ('duration'))),
|
|
|
|
|
|
|
|
}
|
|
|
|