diff options
Diffstat (limited to 'youtube_dl/extractor/wistia.py')
| -rw-r--r-- | youtube_dl/extractor/wistia.py | 53 | 
1 files changed, 34 insertions, 19 deletions
diff --git a/youtube_dl/extractor/wistia.py b/youtube_dl/extractor/wistia.py index 13a079151..8b14840a2 100644 --- a/youtube_dl/extractor/wistia.py +++ b/youtube_dl/extractor/wistia.py @@ -1,8 +1,11 @@  from __future__ import unicode_literals  from .common import InfoExtractor -from ..compat import compat_urllib_request -from ..utils import ExtractorError +from ..utils import ( +    ExtractorError, +    sanitized_Request, +    int_or_none, +)  class WistiaIE(InfoExtractor): @@ -16,6 +19,9 @@ class WistiaIE(InfoExtractor):              'id': 'sh7fpupwlt',              'ext': 'mov',              'title': 'Being Resourceful', +            'description': 'a Clients From Hell Video Series video from worldwidewebhosting', +            'upload_date': '20131204', +            'timestamp': 1386185018,              'duration': 117,          },      } @@ -23,41 +29,50 @@ class WistiaIE(InfoExtractor):      def _real_extract(self, url):          video_id = self._match_id(url) -        request = compat_urllib_request.Request(self._API_URL.format(video_id)) +        request = sanitized_Request(self._API_URL.format(video_id))          request.add_header('Referer', url)  # Some videos require this.          data_json = self._download_json(request, video_id)          if data_json.get('error'):              raise ExtractorError('Error while getting the playlist',                                   expected=True)          data = data_json['media'] +        title = data['name']          formats = []          thumbnails = [] -        for atype, a in data['assets'].items(): -            if atype == 'still': +        for a in data['assets']: +            astatus = a.get('status') +            atype = a.get('type') +            if (astatus is not None and astatus != 2) or atype == 'preview': +                continue +            elif atype in ('still', 'still_image'):                  thumbnails.append({                      'url': a['url'],                      'resolution': '%dx%d' % (a['width'], a['height']),                  }) -                continue -            if atype == 'preview': -                continue -            formats.append({ -                'format_id': atype, -                'url': a['url'], -                'width': a['width'], -                'height': a['height'], -                'filesize': a['size'], -                'ext': a['ext'], -                'preference': 1 if atype == 'original' else None, -            }) +            else: +                formats.append({ +                    'format_id': atype, +                    'url': a['url'], +                    'tbr': int_or_none(a.get('bitrate')), +                    'vbr': int_or_none(a.get('opt_vbitrate')), +                    'width': int_or_none(a.get('width')), +                    'height': int_or_none(a.get('height')), +                    'filesize': int_or_none(a.get('size')), +                    'vcodec': a.get('codec'), +                    'container': a.get('container'), +                    'ext': a.get('ext'), +                    'preference': 1 if atype == 'original' else None, +                })          self._sort_formats(formats)          return {              'id': video_id, -            'title': data['name'], +            'title': title, +            'description': data.get('seoDescription'),              'formats': formats,              'thumbnails': thumbnails, -            'duration': data.get('duration'), +            'duration': int_or_none(data.get('duration')), +            'timestamp': int_or_none(data.get('createdAt')),          }  | 
