[prosiebensat1] Add support for playlists (fixes #4357)
parent
6d0886204a
commit
c84890f708
|
@ -8,6 +8,7 @@ from .common import InfoExtractor
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
compat_urllib_parse,
|
compat_urllib_parse,
|
||||||
unified_strdate,
|
unified_strdate,
|
||||||
|
ExtractorError,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -152,6 +153,15 @@ class ProSiebenSat1IE(InfoExtractor):
|
||||||
'skip_download': True,
|
'skip_download': True,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
'url': 'http://www.prosieben.de/tv/joko-gegen-klaas/videos/playlists/episode-8-ganze-folge-playlist',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '439664',
|
||||||
|
'title': 'Episode 8 - Ganze Folge - Playlist',
|
||||||
|
'description': 'Das finale und härteste Duell aller Zeiten ist vorbei! Der Weltmeister für dieses Jahr steht! Alle packenden Duelle der achten Episode von "Joko gegen Klaas - das Duell um die Welt" seht ihr hier noch einmal in voller Länge!',
|
||||||
|
},
|
||||||
|
'playlist_count': 2,
|
||||||
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
_CLIPID_REGEXES = [
|
_CLIPID_REGEXES = [
|
||||||
|
@ -178,11 +188,48 @@ class ProSiebenSat1IE(InfoExtractor):
|
||||||
r'<span style="padding-left: 4px;line-height:20px; color:#404040">(\d{2}\.\d{2}\.\d{4})</span>',
|
r'<span style="padding-left: 4px;line-height:20px; color:#404040">(\d{2}\.\d{2}\.\d{4})</span>',
|
||||||
r'(\d{2}\.\d{2}\.\d{4}) \| \d{2}:\d{2} Min<br/>',
|
r'(\d{2}\.\d{2}\.\d{4}) \| \d{2}:\d{2} Min<br/>',
|
||||||
]
|
]
|
||||||
|
_ITEM_TYPE_REGEXES = [
|
||||||
|
r"'itemType'\s*:\s*'([^']*)'",
|
||||||
|
]
|
||||||
|
_ITEM_ID_REGEXES = [
|
||||||
|
r"'itemId'\s*:\s*'([^']*)'",
|
||||||
|
]
|
||||||
|
_PLAYLIST_CLIPS_REGEXES = [
|
||||||
|
r'data-qvt=.+?<a href="([^"]+)"',
|
||||||
|
]
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
video_id = self._match_id(url)
|
video_id = self._match_id(url)
|
||||||
webpage = self._download_webpage(url, video_id)
|
webpage = self._download_webpage(url, video_id)
|
||||||
|
|
||||||
|
item_type = self._html_search_regex(self._ITEM_TYPE_REGEXES, webpage, 'item type', default='CLIP')
|
||||||
|
if item_type == 'CLIP':
|
||||||
|
return self._clip_extract(url, webpage)
|
||||||
|
elif item_type == 'PLAYLIST':
|
||||||
|
playlist_id = self._html_search_regex(self._ITEM_ID_REGEXES, webpage, 'playlist id')
|
||||||
|
|
||||||
|
for regex in self._PLAYLIST_CLIPS_REGEXES:
|
||||||
|
playlist_clips = re.findall(regex, webpage, re.DOTALL)
|
||||||
|
if playlist_clips:
|
||||||
|
title = self._html_search_regex(self._TITLE_REGEXES, webpage, 'title')
|
||||||
|
description = self._html_search_regex(self._DESCRIPTION_REGEXES, webpage, 'description', fatal=False)
|
||||||
|
root_url = re.match('(.+?//.+?)/', url).group(1)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'_type': 'playlist',
|
||||||
|
'id': playlist_id,
|
||||||
|
'title': title,
|
||||||
|
'description': description,
|
||||||
|
'entries': [self._clip_extract(root_url + clip_path) for clip_path in playlist_clips]
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
raise ExtractorError('Unknown item type "%s"' % item_type)
|
||||||
|
|
||||||
|
def _clip_extract(self, url, webpage=None):
|
||||||
|
if webpage is None:
|
||||||
|
video_id = self._match_id(url)
|
||||||
|
webpage = self._download_webpage(url, video_id)
|
||||||
|
|
||||||
clip_id = self._html_search_regex(self._CLIPID_REGEXES, webpage, 'clip id')
|
clip_id = self._html_search_regex(self._CLIPID_REGEXES, webpage, 'clip id')
|
||||||
|
|
||||||
access_token = 'testclient'
|
access_token = 'testclient'
|
||||||
|
|
Loading…
Reference in New Issue