diff options
Diffstat (limited to 'youtube_dl/extractor/onionstudios.py')
| -rw-r--r-- | youtube_dl/extractor/onionstudios.py | 59 | 
1 files changed, 24 insertions, 35 deletions
| diff --git a/youtube_dl/extractor/onionstudios.py b/youtube_dl/extractor/onionstudios.py index d7b13a0f1..6fb1a3fcc 100644 --- a/youtube_dl/extractor/onionstudios.py +++ b/youtube_dl/extractor/onionstudios.py @@ -7,6 +7,8 @@ from .common import InfoExtractor  from ..utils import (      determine_ext,      int_or_none, +    float_or_none, +    mimetype2ext,  ) @@ -15,15 +17,14 @@ class OnionStudiosIE(InfoExtractor):      _TESTS = [{          'url': 'http://www.onionstudios.com/videos/hannibal-charges-forward-stops-for-a-cocktail-2937', -        'md5': 'd4851405d31adfadf71cd7a487b765bb', +        'md5': 'e49f947c105b8a78a675a0ee1bddedfe',          'info_dict': {              'id': '2937',              'ext': 'mp4',              'title': 'Hannibal charges forward, stops for a cocktail', -            'description': 'md5:e786add7f280b7f0fe237b64cc73df76',              'thumbnail': 're:^https?://.*\.jpg$',              'uploader': 'The A.V. Club', -            'uploader_id': 'TheAVClub', +            'uploader_id': 'the-av-club',          },      }, {          'url': 'http://www.onionstudios.com/embed?id=2855&autoplay=true', @@ -40,50 +41,38 @@ class OnionStudiosIE(InfoExtractor):      def _real_extract(self, url):          video_id = self._match_id(url) -        webpage = self._download_webpage( -            'http://www.onionstudios.com/embed?id=%s' % video_id, video_id) +        video_data = self._download_json( +            'http://www.onionstudios.com/video/%s.json' % video_id, video_id) + +        title = video_data['title']          formats = [] -        for src in re.findall(r'<source[^>]+src="([^"]+)"', webpage): -            ext = determine_ext(src) +        for source in video_data.get('sources', []): +            source_url = source.get('url') +            if not source_url: +                continue +            ext = mimetype2ext(source.get('content_type')) or determine_ext(source_url)              if ext == 'm3u8':                  formats.extend(self._extract_m3u8_formats( -                    src, video_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False)) +                    source_url, video_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False))              else: -                height = int_or_none(self._search_regex( -                    r'/(\d+)\.%s' % ext, src, 'height', default=None)) +                tbr = int_or_none(source.get('bitrate'))                  formats.append({ -                    'format_id': ext + ('-%sp' % height if height else ''), -                    'url': src, -                    'height': height, +                    'format_id': ext + ('-%d' % tbr if tbr else ''), +                    'url': source_url, +                    'width': int_or_none(source.get('width')), +                    'tbr': tbr,                      'ext': ext, -                    'preference': 1,                  })          self._sort_formats(formats) -        title = self._search_regex( -            r'share_title\s*=\s*(["\'])(?P<title>[^\1]+?)\1', -            webpage, 'title', group='title') -        description = self._search_regex( -            r'share_description\s*=\s*(["\'])(?P<description>[^\'"]+?)\1', -            webpage, 'description', default=None, group='description') -        thumbnail = self._search_regex( -            r'poster\s*=\s*(["\'])(?P<thumbnail>[^\1]+?)\1', -            webpage, 'thumbnail', default=False, group='thumbnail') - -        uploader_id = self._search_regex( -            r'twitter_handle\s*=\s*(["\'])(?P<uploader_id>[^\1]+?)\1', -            webpage, 'uploader id', fatal=False, group='uploader_id') -        uploader = self._search_regex( -            r'window\.channelName\s*=\s*(["\'])Embedded:(?P<uploader>[^\1]+?)\1', -            webpage, 'uploader', default=False, group='uploader') -          return {              'id': video_id,              'title': title, -            'description': description, -            'thumbnail': thumbnail, -            'uploader': uploader, -            'uploader_id': uploader_id, +            'thumbnail': video_data.get('poster_url'), +            'uploader': video_data.get('channel_name'), +            'uploader_id': video_data.get('channel_slug'), +            'duration': float_or_none(video_data.get('duration', 1000)), +            'tags': video_data.get('tags'),              'formats': formats,          } | 
