Actually implement getting videos on mshokej.ceskatelevize...

This commit is contained in:
Jiri Palecek 2017-05-05 05:00:32 +02:00
parent e2603c57e7
commit 4bdf3c4066

View File

@ -25,7 +25,7 @@ from ..utils import (
class CeskaTelevizeIE(InfoExtractor): class CeskaTelevizeIE(InfoExtractor):
_VALID_URL = r'https?://(?:www\.)?ceskatelevize\.cz/ivysilani/(?:[^/?#&]+/)*(?P<id>[^/#?]+)' _VALID_URL = r'https?://(?:(?:www\.)?ceskatelevize\.cz/ivysilani/|mshokej\.ceskatelevize\.cz/)(?:[^/?#&]+/)*(?P<id>[^/#?]+)'
_TESTS = [{ _TESTS = [{
'url': 'http://www.ceskatelevize.cz/ivysilani/ivysilani/10441294653-hyde-park-civilizace/214411058091220', 'url': 'http://www.ceskatelevize.cz/ivysilani/ivysilani/10441294653-hyde-park-civilizace/214411058091220',
'info_dict': { 'info_dict': {
@ -71,6 +71,30 @@ class CeskaTelevizeIE(InfoExtractor):
}, { }, {
'url': 'http://www.ceskatelevize.cz/ivysilani/embed/iFramePlayer.php?hash=d6a3e1370d2e4fa76296b90bad4dfc19673b641e&IDEC=217 562 22150/0004&channelID=1&width=100%25', 'url': 'http://www.ceskatelevize.cz/ivysilani/embed/iFramePlayer.php?hash=d6a3e1370d2e4fa76296b90bad4dfc19673b641e&IDEC=217 562 22150/0004&channelID=1&width=100%25',
'only_matching': True, 'only_matching': True,
}, {
'url': 'http://mshokej.ceskatelevize.cz/mshokej/zpravy/353352--pastrnak-jsem-rad-ze-jsem-se-rozhodl-prijet-reprezentovat-je-pro-me-cest',
'info_dict': {
'id': '61924494877293706',
'ext': 'mp4',
'title': 'Článek - MS hokej 2017',
'duration': 68.8,
},
'params': {
# m3u8 download
'skip_download': True,
},
}, {
'url': 'http://mshokej.ceskatelevize.cz/videoarchiv/rozhovory-a-reportaze/353090--chystany-special-pro-ms-spousta-novinek-a-prime-prenosy-vsech-zapasu',
'info_dict': {
'id': '61924494877291670',
'ext': 'mp4',
'title': 'videoarchiv - MS hokej 2017',
'duration': 243.4,
},
'params': {
# m3u8 download
'skip_download': True,
},
}] }]
def _real_extract(self, url, retries=0): def _real_extract(self, url, retries=0):
@ -101,35 +125,59 @@ class CeskaTelevizeIE(InfoExtractor):
type_ = None type_ = None
episode_id = None episode_id = None
data = []
playlist = self._parse_json( is_mshokej = re.match(r'^https?://mshokej\..*', url)
self._search_regex( if is_mshokej:
r'getPlaylistUrl\(\[({.+?})\]', webpage, 'playlist', ids = [unescapeHTML(m.group('id')) for m in re.finditer(r'<(?:[^>]*?\b(?:class=["\'](?P<class>[^"\']*)["\']|data-(?:videoarchive_autoplay|id)=["\'](?P<id>[^"\']*)["\']|data-type=["\'](?P<dataType>[^"\']*)["\']))*', webpage)
default='{}'), playlist_id) if ((m.group('dataType') and m.group('dataType') == 'media') or
if playlist: m.group('class') and "video-archive__video" in m.group('class')) and
type_ = playlist.get('type') m.group('id')
episode_id = playlist.get('id') ]
o = set()
for id in ids:
if id not in o:
data.append({
'playlist[0][type]': 'ct24',
'playlist[0][id]': id,
'requestUrl': url,
'requestSource': 'sport',
'type': 'dash'
})
o.add(id)
if not data:
raise ExtractorError('Couldn\'t find any video ids')
else:
playlist = self._parse_json(
self._search_regex(
r'getPlaylistUrl\(\[({.+?})\]', webpage, 'playlist',
default='{}'), playlist_id)
if playlist:
type_ = playlist.get('type')
episode_id = playlist.get('id')
if not type_: if not type_:
type_ = self._html_search_regex( type_ = self._html_search_regex(
r'getPlaylistUrl\(\[\{"type":"(.+?)","id":".+?"\}\],', r'getPlaylistUrl\(\[\{"type":"(.+?)","id":".+?"\}\],',
webpage, 'type') webpage, 'type')
if not episode_id: if not episode_id:
episode_id = self._html_search_regex( episode_id = self._html_search_regex(
r'getPlaylistUrl\(\[\{"type":".+?","id":"(.+?)"\}\],', r'getPlaylistUrl\(\[\{"type":".+?","id":"(.+?)"\}\],',
webpage, 'episode_id') webpage, 'episode_id')
data = { data = [{
'playlist[0][type]': type_, 'playlist[0][type]': type_,
'playlist[0][id]': episode_id, 'playlist[0][id]': episode_id,
'requestUrl': compat_urllib_parse_urlparse(url).path, 'requestUrl': compat_urllib_parse_urlparse(url).path,
'requestSource': 'iVysilani', 'requestSource': 'iVysilani',
} }]
entries = [] entries = []
for user_agent in (None, USER_AGENTS['Safari']): for data in data:
for user_agent in (None, USER_AGENTS['Safari']):
req = sanitized_Request( req = sanitized_Request(
'http://mshokej.ceskatelevize.cz/get-client-playlist' if is_mshokej else
'http://www.ceskatelevize.cz/ivysilani/ajax/get-client-playlist', 'http://www.ceskatelevize.cz/ivysilani/ajax/get-client-playlist',
data=urlencode_postdata(data)) data=urlencode_postdata(data))