From 6bb9a3a6ada6bf069b08b632488da69c2ebdb3d1 Mon Sep 17 00:00:00 2001 From: remitamine Date: Wed, 22 Jul 2015 12:34:42 +0100 Subject: [PATCH 1/4] [screenwavemedia] fix info extraction --- youtube_dl/extractor/screenwavemedia.py | 68 ++++++++----------------- 1 file changed, 22 insertions(+), 46 deletions(-) diff --git a/youtube_dl/extractor/screenwavemedia.py b/youtube_dl/extractor/screenwavemedia.py index d1ab66b32..e21287ecf 100644 --- a/youtube_dl/extractor/screenwavemedia.py +++ b/youtube_dl/extractor/screenwavemedia.py @@ -7,6 +7,7 @@ from .common import InfoExtractor from ..utils import ( int_or_none, unified_strdate, + js_to_json, ) @@ -22,59 +23,34 @@ class ScreenwaveMediaIE(InfoExtractor): video_id = self._match_id(url) playerdata = self._download_webpage( - 'http://player.screenwavemedia.com/play/player.php?id=%s' % video_id, + 'http://player.screenwavemedia.com/player.php?id=%s' % video_id, video_id, 'Downloading player webpage') vidtitle = self._search_regex( r'\'vidtitle\'\s*:\s*"([^"]+)"', playerdata, 'vidtitle').replace('\\/', '/') - vidurl = self._search_regex( - r'\'vidurl\'\s*:\s*"([^"]+)"', playerdata, 'vidurl').replace('\\/', '/') - videolist_url = None + playerconfig = self._download_webpage( + 'http://player.screenwavemedia.com/player.js', + video_id, 'Downloading playerconfig webpage') - mobj = re.search(r"'videoserver'\s*:\s*'(?P[^']+)'", playerdata) - if mobj: - videoserver = mobj.group('videoserver') - mobj = re.search(r'\'vidid\'\s*:\s*"(?P[^\']+)"', playerdata) - vidid = mobj.group('vidid') if mobj else video_id - videolist_url = 'http://%s/vod/smil:%s.smil/jwplayer.smil' % (videoserver, vidid) - else: - mobj = re.search(r"file\s*:\s*'(?Phttp.+?/jwplayer\.smil)'", playerdata) - if mobj: - videolist_url = mobj.group('smil') + videoserver = self._search_regex(r"'videoserver'\s*:\s*'([^']+)", playerconfig, 'videoserver') - if videolist_url: - videolist = self._download_xml(videolist_url, video_id, 'Downloading videolist XML') - formats = [] - baseurl = vidurl[:vidurl.rfind('/') + 1] - for video in videolist.findall('.//video'): - src = video.get('src') - if not src: - continue - file_ = src.partition(':')[-1] - width = int_or_none(video.get('width')) - height = int_or_none(video.get('height')) - bitrate = int_or_none(video.get('system-bitrate'), scale=1000) - format = { - 'url': baseurl + file_, - 'format_id': src.rpartition('.')[0].rpartition('_')[-1], - } - if width or height: - format.update({ - 'tbr': bitrate, - 'width': width, - 'height': height, - }) - else: - format.update({ - 'abr': bitrate, - 'vcodec': 'none', - }) - formats.append(format) - else: - formats = [{ - 'url': vidurl, - }] + sources = self._parse_json(js_to_json(self._search_regex(r"sources\s*:\s*(\[[^\]]+?\])", playerconfig, 'sources', flags=re.DOTALL).replace("' + thisObj.options.videoserver + '", videoserver).replace("' + thisObj.options.attributes.vidid + '", video_id)), video_id) + + formats = [] + for source in sources: + if source['type'] == 'hls': + formats.extend(self._extract_m3u8_formats(source['file'], video_id)) + else: + format_label = source.get('label') + height = int_or_none(self._search_regex( + r'^(\d+)[pP]', format_label, 'height', default=None)) + formats.append({ + 'url': source['file'], + 'format': format_label, + 'ext': source.get('type'), + 'height': height, + }) self._sort_formats(formats) return { From 39af6282a4999c898ba078557e13c4fafaffb9e8 Mon Sep 17 00:00:00 2001 From: remitamine Date: Wed, 22 Jul 2015 13:09:52 +0100 Subject: [PATCH 2/4] [screenwavemedia] break long line --- youtube_dl/extractor/screenwavemedia.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/youtube_dl/extractor/screenwavemedia.py b/youtube_dl/extractor/screenwavemedia.py index e21287ecf..8add813c6 100644 --- a/youtube_dl/extractor/screenwavemedia.py +++ b/youtube_dl/extractor/screenwavemedia.py @@ -35,7 +35,22 @@ class ScreenwaveMediaIE(InfoExtractor): videoserver = self._search_regex(r"'videoserver'\s*:\s*'([^']+)", playerconfig, 'videoserver') - sources = self._parse_json(js_to_json(self._search_regex(r"sources\s*:\s*(\[[^\]]+?\])", playerconfig, 'sources', flags=re.DOTALL).replace("' + thisObj.options.videoserver + '", videoserver).replace("' + thisObj.options.attributes.vidid + '", video_id)), video_id) + sources = self._parse_json( + js_to_json( + self._search_regex( + r"sources\s*:\s*(\[[^\]]+?\])", playerconfig, + 'sources', + flags=re.DOTALL + ).replace( + "' + thisObj.options.videoserver + '", + videoserver + ).replace( + "' + thisObj.options.attributes.vidid + '", + video_id + ) + ), + video_id + ) formats = [] for source in sources: From 7c357aad13cab4b2426face92adebd49d7e28488 Mon Sep 17 00:00:00 2001 From: remitamine Date: Wed, 22 Jul 2015 15:20:30 +0100 Subject: [PATCH 3/4] [screenwavemedia] remove unnecessary import --- youtube_dl/extractor/screenwavemedia.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/youtube_dl/extractor/screenwavemedia.py b/youtube_dl/extractor/screenwavemedia.py index 8add813c6..d0c576202 100644 --- a/youtube_dl/extractor/screenwavemedia.py +++ b/youtube_dl/extractor/screenwavemedia.py @@ -1,8 +1,6 @@ # encoding: utf-8 from __future__ import unicode_literals -import re - from .common import InfoExtractor from ..utils import ( int_or_none, @@ -40,7 +38,6 @@ class ScreenwaveMediaIE(InfoExtractor): self._search_regex( r"sources\s*:\s*(\[[^\]]+?\])", playerconfig, 'sources', - flags=re.DOTALL ).replace( "' + thisObj.options.videoserver + '", videoserver From 3107f63f67f10cce324e087465b8f4dccc2681a2 Mon Sep 17 00:00:00 2001 From: remitamine Date: Wed, 29 Jul 2015 11:35:53 +0100 Subject: [PATCH 4/4] [screenwavemedia] change videoId replace string --- youtube_dl/extractor/screenwavemedia.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/youtube_dl/extractor/screenwavemedia.py b/youtube_dl/extractor/screenwavemedia.py index d0c576202..09c085dcf 100644 --- a/youtube_dl/extractor/screenwavemedia.py +++ b/youtube_dl/extractor/screenwavemedia.py @@ -42,7 +42,7 @@ class ScreenwaveMediaIE(InfoExtractor): "' + thisObj.options.videoserver + '", videoserver ).replace( - "' + thisObj.options.attributes.vidid + '", + "' + playerVidId + '", video_id ) ),