diff options
| author | Philipp Hagemeister <phihag@phihag.de> | 2014-02-13 16:32:42 +0100 | 
|---|---|---|
| committer | Philipp Hagemeister <phihag@phihag.de> | 2014-02-13 16:32:42 +0100 | 
| commit | 6f90d098c5e52bf16c779d0ab638fb88dff837c3 (patch) | |
| tree | 5c47a21ec916667dabf22fab24c3ebf04c48b651 | |
| parent | 0715161450e9168b266753751786e97f817fed15 (diff) | |
[ecapist] modernize and fix id property
| -rw-r--r-- | youtube_dl/extractor/escapist.py | 60 | 
1 files changed, 29 insertions, 31 deletions
| diff --git a/youtube_dl/extractor/escapist.py b/youtube_dl/extractor/escapist.py index b1242f6bc..272dfe1f6 100644 --- a/youtube_dl/extractor/escapist.py +++ b/youtube_dl/extractor/escapist.py @@ -1,9 +1,9 @@ -import json +from __future__ import unicode_literals +  import re  from .common import InfoExtractor  from ..utils import ( -    compat_str,      compat_urllib_parse,      ExtractorError, @@ -11,70 +11,68 @@ from ..utils import (  class EscapistIE(InfoExtractor): -    _VALID_URL = r'^https?://?(www\.)?escapistmagazine\.com/videos/view/(?P<showname>[^/]+)/(?P<episode>[^/?]+)[/?]?.*$' +    _VALID_URL = r'^https?://?(www\.)?escapistmagazine\.com/videos/view/(?P<showname>[^/]+)/(?P<id>[0-9]+)-'      _TEST = { -        u'url': u'http://www.escapistmagazine.com/videos/view/the-escapist-presents/6618-Breaking-Down-Baldurs-Gate', -        u'file': u'6618-Breaking-Down-Baldurs-Gate.mp4', -        u'md5': u'ab3a706c681efca53f0a35f1415cf0d1', -        u'info_dict': { -            u"description": u"Baldur's Gate: Original, Modded or Enhanced Edition? I'll break down what you can expect from the new Baldur's Gate: Enhanced Edition.",  -            u"uploader": u"the-escapist-presents",  -            u"title": u"Breaking Down Baldur's Gate" +        'url': 'http://www.escapistmagazine.com/videos/view/the-escapist-presents/6618-Breaking-Down-Baldurs-Gate', +        'md5': 'ab3a706c681efca53f0a35f1415cf0d1', +        'info_dict': { +            'id': '6618', +            'ext': 'mp4', +            'description': "Baldur's Gate: Original, Modded or Enhanced Edition? I'll break down what you can expect from the new Baldur's Gate: Enhanced Edition.", +            'uploader': 'the-escapist-presents', +            'title': "Breaking Down Baldur's Gate",          }      }      def _real_extract(self, url):          mobj = re.match(self._VALID_URL, url)          showName = mobj.group('showname') -        videoId = mobj.group('episode') +        video_id = mobj.group('id') -        self.report_extraction(videoId) -        webpage = self._download_webpage(url, videoId) +        self.report_extraction(video_id) +        webpage = self._download_webpage(url, video_id)          videoDesc = self._html_search_regex(              r'<meta name="description" content="([^"]*)"', -            webpage, u'description', fatal=False) +            webpage, 'description', fatal=False)          playerUrl = self._og_search_video_url(webpage, name=u'player URL')          title = self._html_search_regex(              r'<meta name="title" content="([^"]*)"', -            webpage, u'title').split(' : ')[-1] +            webpage, 'title').split(' : ')[-1] -        configUrl = self._search_regex('config=(.*)$', playerUrl, u'config URL') +        configUrl = self._search_regex('config=(.*)$', playerUrl, 'config URL')          configUrl = compat_urllib_parse.unquote(configUrl)          formats = [] -        def _add_format(name, cfgurl): -            configJSON = self._download_webpage( -                cfgurl, videoId, -                u'Downloading ' + name + ' configuration', -                u'Unable to download ' + name + ' configuration') - -            # Technically, it's JavaScript, not JSON -            configJSON = configJSON.replace("'", '"') +        def _add_format(name, cfgurl, quality): +            config = self._download_json( +                cfgurl, video_id, +                'Downloading ' + name + ' configuration', +                'Unable to download ' + name + ' configuration', +                transform_source=lambda s: s.replace("'", '"')) -            try: -                config = json.loads(configJSON) -            except (ValueError,) as err: -                raise ExtractorError(u'Invalid JSON in configuration file: ' + compat_str(err))              playlist = config['playlist']              formats.append({                  'url': playlist[1]['url'],                  'format_id': name, +                'quality': quality,              }) -        _add_format(u'normal', configUrl) +        _add_format('normal', configUrl, quality=0)          hq_url = (configUrl +                    ('&hq=1' if '?' in configUrl else configUrl + '?hq=1'))          try: -            _add_format(u'hq', hq_url) +            _add_format('hq', hq_url, quality=1)          except ExtractorError:              pass  # That's fine, we'll just use normal quality +        self._sort_formats(formats) +          return { -            'id': videoId, +            'id': video_id,              'formats': formats,              'uploader': showName,              'title': title, | 
