mirror of
https://github.com/l1ving/youtube-dl
synced 2025-03-12 17:37:20 +08:00
[ceskatelevize] Support for live video streams of the 2017 IIHF World Ice Hockey Championship
To get the streams use URL http://mshokej.ceskatelevize.cz. NOTE: This is without tests (so far), because I don't know how to make tests of something that changes in the course of hours.
This commit is contained in:
parent
3faf928475
commit
e8222af8cd
@ -25,7 +25,7 @@ from ..utils import (
|
|||||||
|
|
||||||
|
|
||||||
class CeskaTelevizeIE(InfoExtractor):
|
class CeskaTelevizeIE(InfoExtractor):
|
||||||
_VALID_URL = r'https?://(?:(?:www\.)?ceskatelevize\.cz/ivysilani/|mshokej\.ceskatelevize\.cz/)(?:[^/?#&]+/)*(?P<id>[^/#?]+)'
|
_VALID_URL = r'https?://(?:(?:www\.)?ceskatelevize\.cz/ivysilani/|mshokej\.ceskatelevize\.cz/)(?:[^/?#&]+/)*(?P<id>[^/#?]+)|https?://mshokej\.ceskatelevize\.cz/'
|
||||||
_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': {
|
||||||
@ -129,19 +129,19 @@ class CeskaTelevizeIE(InfoExtractor):
|
|||||||
|
|
||||||
is_mshokej = re.match(r'^https?://mshokej\..*', url)
|
is_mshokej = re.match(r'^https?://mshokej\..*', url)
|
||||||
if is_mshokej:
|
if is_mshokej:
|
||||||
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)
|
ids = [(unescapeHTML(m.group('id')), "broadcast" in m.group('class')) for m in re.finditer(r'<(?:[^>]*?\b(?:class=["\'](?P<class>[^"\']*)["\']|data-(?:videoarchive_autoplay|id|live_channel)=["\'](?P<id>[^"\']*)["\']|data-type=["\'](?P<dataType>[^"\']*)["\']))*', webpage)
|
||||||
if ((m.group('dataType') and m.group('dataType') == 'media') or
|
if ((m.group('dataType') and m.group('dataType') == 'media') or
|
||||||
m.group('class') and "video-archive__video" in m.group('class')) and
|
m.group('class') and re.search(r'\b(?:video-archive__video|broadcast)\b', m.group('class'))) and
|
||||||
m.group('id')
|
m.group('id')
|
||||||
]
|
]
|
||||||
o = set()
|
o = set()
|
||||||
for id in ids:
|
for id, is_broadcast in ids:
|
||||||
if id not in o:
|
if id not in o:
|
||||||
data.append({
|
data.append({
|
||||||
'playlist[0][type]': 'ct24',
|
'playlist[0][type]': 'ct24',
|
||||||
'playlist[0][id]': id,
|
'playlist[0][id]': id,
|
||||||
'requestUrl': url,
|
'requestUrl': url,
|
||||||
'requestSource': 'sport',
|
'requestSource': 'sport' if not is_broadcast else 'mshokej-live',
|
||||||
'type': 'dash'
|
'type': 'dash'
|
||||||
})
|
})
|
||||||
o.add(id)
|
o.add(id)
|
||||||
@ -176,12 +176,20 @@ class CeskaTelevizeIE(InfoExtractor):
|
|||||||
|
|
||||||
for data in data:
|
for data in data:
|
||||||
for user_agent in (None, USER_AGENTS['Safari']):
|
for user_agent in (None, USER_AGENTS['Safari']):
|
||||||
req = sanitized_Request(
|
req = None
|
||||||
'http://mshokej.ceskatelevize.cz/get-client-playlist' if is_mshokej else
|
if data['requestSource'] == 'mshokej-live':
|
||||||
'http://www.ceskatelevize.cz/ivysilani/ajax/get-client-playlist',
|
req = sanitized_Request(
|
||||||
data=urlencode_postdata(data))
|
'http://playlist.ceskatelevize.cz/get-live-playlist/flash/%s' % data['playlist[0][id]']
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
|
||||||
|
req = sanitized_Request(
|
||||||
|
'http://mshokej.ceskatelevize.cz/get-client-playlist' if is_mshokej else
|
||||||
|
'http://www.ceskatelevize.cz/ivysilani/ajax/get-client-playlist',
|
||||||
|
data=urlencode_postdata(data))
|
||||||
|
|
||||||
|
req.add_header('Content-type', 'application/x-www-form-urlencoded')
|
||||||
|
|
||||||
req.add_header('Content-type', 'application/x-www-form-urlencoded')
|
|
||||||
req.add_header('x-addr', '127.0.0.1')
|
req.add_header('x-addr', '127.0.0.1')
|
||||||
req.add_header('X-Requested-With', 'XMLHttpRequest')
|
req.add_header('X-Requested-With', 'XMLHttpRequest')
|
||||||
if user_agent:
|
if user_agent:
|
||||||
@ -193,20 +201,31 @@ class CeskaTelevizeIE(InfoExtractor):
|
|||||||
if not playlistpage:
|
if not playlistpage:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
playlist_url = playlistpage['url']
|
playlist = None
|
||||||
if playlist_url == 'error_region':
|
playlist_title = None
|
||||||
raise ExtractorError(NOT_AVAILABLE_STRING, expected=True)
|
playlist_description = None
|
||||||
|
|
||||||
req = sanitized_Request(compat_urllib_parse_unquote(playlist_url))
|
if playlistpage.get('url'):
|
||||||
req.add_header('Referer', url)
|
playlist_url = playlistpage['url']
|
||||||
|
if playlist_url == 'error_region':
|
||||||
|
raise ExtractorError(NOT_AVAILABLE_STRING, expected=True)
|
||||||
|
|
||||||
playlist_title = self._og_search_title(webpage, default=None) or unescapeHTML(self._search_regex(r'<title[^>]*>(.*)</title', webpage, 'webpage title', fatal=False))
|
req = sanitized_Request(compat_urllib_parse_unquote(playlist_url))
|
||||||
playlist_description = self._og_search_description(webpage, default=None)
|
req.add_header('Referer', url)
|
||||||
|
|
||||||
|
playlist_title = self._og_search_title(webpage, default=None) or unescapeHTML(self._search_regex(r'<title[^>]*>(.*)</title', webpage, 'webpage title', fatal=False))
|
||||||
|
playlist_description = self._og_search_description(webpage, default=None)
|
||||||
|
|
||||||
|
playlist = self._download_json(req, playlist_id, fatal=False)
|
||||||
|
else:
|
||||||
|
playlist = playlistpage
|
||||||
|
|
||||||
playlist = self._download_json(req, playlist_id, fatal=False)
|
|
||||||
if not playlist:
|
if not playlist:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
playlist_title = playlist_title or playlist.get('setup').get('title')
|
||||||
|
playlist_description = playlist_description or playlist.get('setup').get('description')
|
||||||
|
|
||||||
playlist = playlist.get('playlist')
|
playlist = playlist.get('playlist')
|
||||||
if not isinstance(playlist, list):
|
if not isinstance(playlist, list):
|
||||||
continue
|
continue
|
||||||
|
Loading…
x
Reference in New Issue
Block a user