yt-dlc/youtube_dl/extractor/sportbox.py

89 lines
2.9 KiB
Python
Raw Normal View History

# coding: utf-8
from __future__ import unicode_literals
import re
from .common import InfoExtractor
2017-07-22 14:35:14 +00:00
from ..utils import (
determine_ext,
int_or_none,
js_to_json,
)
2015-05-15 16:50:44 +00:00
class SportBoxEmbedIE(InfoExtractor):
_VALID_URL = r'https?://news\.sportbox\.ru/vdl/player(?:/[^/]+/|\?.*?\bn?id=)(?P<id>\d+)'
_TESTS = [{
'url': 'http://news.sportbox.ru/vdl/player/ci/211355',
'info_dict': {
'id': '211355',
'ext': 'mp4',
2018-10-26 08:00:55 +00:00
'title': 'В Новороссийске прошел детский турнир «Поле славы боевой»',
'thumbnail': r're:^https?://.*\.jpg$',
2017-07-22 14:35:14 +00:00
'duration': 292,
'view_count': int,
2015-05-15 16:50:44 +00:00
},
'params': {
# m3u8 download
'skip_download': True,
},
}, {
'url': 'http://news.sportbox.ru/vdl/player?nid=370908&only_player=1&autostart=false&playeri=2&height=340&width=580',
'only_matching': True,
2017-07-22 14:35:14 +00:00
}, {
'url': 'https://news.sportbox.ru/vdl/player/media/193095',
'only_matching': True,
2015-05-15 16:50:44 +00:00
}]
2015-05-15 17:08:44 +00:00
@staticmethod
def _extract_urls(webpage):
return re.findall(
r'<iframe[^>]+src="(https?://news\.sportbox\.ru/vdl/player[^"]+)"',
webpage)
2015-05-15 16:50:44 +00:00
def _real_extract(self, url):
video_id = self._match_id(url)
webpage = self._download_webpage(url, video_id)
2017-07-22 14:35:14 +00:00
wjplayer_data = self._parse_json(
self._search_regex(
2018-10-26 08:00:55 +00:00
r'(?s)var\s+playerOptions\s*=\s*({.+?});', webpage, 'wjplayer settings'),
2017-07-22 14:35:14 +00:00
video_id, transform_source=js_to_json)
2018-10-26 08:00:55 +00:00
wjplayer_data['sources'] = self._parse_json(
self._search_regex(
r'(?s)playerOptions\.sources\s*=\s*(\[.+?\]);', webpage, 'wjplayer sources'),
video_id, transform_source=js_to_json)
title = self._html_search_meta(
['og:title', 'twitter:title'], webpage) or self._html_search_regex(
r'<title>(.+?)</title>', webpage, 'title', fatal=False) or video_id
2017-07-22 14:35:14 +00:00
formats = []
for source in wjplayer_data['sources']:
src = source.get('src')
if not src:
continue
if determine_ext(src) == 'm3u8':
formats.extend(self._extract_m3u8_formats(
src, video_id, 'mp4', entry_protocol='m3u8_native',
m3u8_id='hls', fatal=False))
else:
formats.append({
'url': src,
})
self._sort_formats(formats)
2015-05-15 16:50:44 +00:00
2017-07-22 14:35:14 +00:00
view_count = int_or_none(self._search_regex(
r'Просмотров\s*:\s*(\d+)', webpage, 'view count', default=None))
2015-05-15 16:50:44 +00:00
return {
'id': video_id,
2018-10-26 08:00:55 +00:00
'title': title,
2017-07-22 14:35:14 +00:00
'thumbnail': wjplayer_data.get('poster'),
'duration': int_or_none(wjplayer_data.get('duration')),
'view_count': view_count,
'formats': formats,
}