X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=youtube_dl%2Fextractor%2Fprosiebensat1.py;h=536a42dc88a4e17bbd039289508521d1ea13e282;hb=c8e337450b63c3e3d93d1d6badf9475d0757690f;hp=8c9451f4053036e0575ed5551b137fe6d168b166;hpb=8d1c8cae9ce9027058d90b246b9fa30ea88602ef;p=youtube-dl.git diff --git a/youtube_dl/extractor/prosiebensat1.py b/youtube_dl/extractor/prosiebensat1.py index 8c9451f40..536a42dc8 100644 --- a/youtube_dl/extractor/prosiebensat1.py +++ b/youtube_dl/extractor/prosiebensat1.py @@ -5,17 +5,19 @@ import re from hashlib import sha1 from .common import InfoExtractor -from ..utils import ( +from ..compat import ( compat_urllib_parse, +) +from ..utils import ( unified_strdate, - ExtractorError, + int_or_none, ) class ProSiebenSat1IE(InfoExtractor): IE_NAME = 'prosiebensat1' IE_DESC = 'ProSiebenSat.1 Digital' - _VALID_URL = r'https?://(?:www\.)?(?:(?:prosieben|prosiebenmaxx|sixx|sat1|kabeleins|ran|the-voice-of-germany)\.de|fem\.com)/(?P.+)' + _VALID_URL = r'https?://(?:www\.)?(?:(?:prosieben|prosiebenmaxx|sixx|sat1|kabeleins|the-voice-of-germany)\.(?:de|at)|ran\.de|fem\.com)/(?P.+)' _TESTS = [ { @@ -23,7 +25,7 @@ class ProSiebenSat1IE(InfoExtractor): 'info_dict': { 'id': '2104602', 'ext': 'mp4', - 'title': 'Staffel 2, Episode 18 - Jahresrückblick', + 'title': 'Episode 18 - Staffel 2', 'description': 'md5:8733c81b702ea472e069bc48bb658fc1', 'upload_date': '20131231', 'duration': 5845.04, @@ -158,7 +160,7 @@ class ProSiebenSat1IE(InfoExtractor): '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!', + 'description': 'md5:63b8963e71f481782aeea877658dec84', }, 'playlist_count': 2, }, @@ -175,6 +177,7 @@ class ProSiebenSat1IE(InfoExtractor): r'
\s*

(.+?)

', r'\s*

(.+?)

', r'

\s*(.+?)

', + r'
\s*

([^<]+)

\s*
', ] _DESCRIPTION_REGEXES = [ r'

\s*(.+?)

', @@ -189,52 +192,23 @@ class ProSiebenSat1IE(InfoExtractor): r'(\d{2}\.\d{2}\.\d{4})', r'(\d{2}\.\d{2}\.\d{4}) \| \d{2}:\d{2} Min
', ] - _ITEM_TYPE_REGEXES = [ + _PAGE_TYPE_REGEXES = [ + r'', r"'itemType'\s*:\s*'([^']*)'", ] - _ITEM_ID_REGEXES = [ + _PLAYLIST_ID_REGEXES = [ + r'content[iI]d=(\d+)', r"'itemId'\s*:\s*'([^']*)'", ] - _PLAYLIST_CLIPS_REGEXES = [ - r'data-qvt=.+?rtmpe?://[^/]+/(?P[^/]+))/(?P.+)$', source['url']) + mobj = re.search(r'^(?Prtmpe?://[^/]+)/(?P.+)$', source['url']) if not mobj: continue + path = mobj.group('path') + mp4colon_index = path.rfind('mp4:') + app = path[:mp4colon_index] + play_path = path[mp4colon_index:] formats.append({ - 'url': mobj.group('url'), - 'app': mobj.group('app'), - 'play_path': mobj.group('playpath'), + 'url': '%s/%s' % (mobj.group('url'), app), + 'app': app, + 'play_path': play_path, 'player_url': 'http://livepassdl.conviva.com/hf/ver/2.79.0.17083/LivePassModuleMain.swf', 'page_url': 'http://www.prosieben.de', 'vbr': fix_bitrate(source['bitrate']), @@ -329,3 +310,31 @@ class ProSiebenSat1IE(InfoExtractor): 'duration': duration, 'formats': formats, } + + def _extract_playlist(self, url, webpage): + playlist_id = self._html_search_regex( + self._PLAYLIST_ID_REGEXES, webpage, 'playlist id') + for regex in self._PLAYLIST_CLIP_REGEXES: + playlist_clips = re.findall(regex, webpage) + 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) + entries = [ + self.url_result( + re.match('(.+?//.+?)/', url).group(1) + clip_path, + 'ProSiebenSat1') + for clip_path in playlist_clips] + return self.playlist_result(entries, playlist_id, title, description) + + def _real_extract(self, url): + video_id = self._match_id(url) + webpage = self._download_webpage(url, video_id) + page_type = self._search_regex( + self._PAGE_TYPE_REGEXES, webpage, + 'page type', default='clip').lower() + if page_type == 'clip': + return self._extract_clip(url, webpage) + elif page_type == 'playlist': + return self._extract_playlist(url, webpage)