diff options
Diffstat (limited to 'youtube_dl/extractor/tumblr.py')
| -rw-r--r-- | youtube_dl/extractor/tumblr.py | 57 | 
1 files changed, 51 insertions, 6 deletions
| diff --git a/youtube_dl/extractor/tumblr.py b/youtube_dl/extractor/tumblr.py index 3d3b635e4..4f844706d 100644 --- a/youtube_dl/extractor/tumblr.py +++ b/youtube_dl/extractor/tumblr.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals  import re  from .common import InfoExtractor +from ..utils import int_or_none  class TumblrIE(InfoExtractor): @@ -29,6 +30,19 @@ class TumblrIE(InfoExtractor):              'thumbnail': 're:http://.*\.jpg',          }      }, { +        'url': 'http://hdvideotest.tumblr.com/post/130323439814/test-description-for-my-hd-video', +        'md5': '7ae503065ad150122dc3089f8cf1546c', +        'info_dict': { +            'id': '130323439814', +            'ext': 'mp4', +            'title': 'HD Video Testing \u2014 Test description for my HD video', +            'description': 'md5:97cc3ab5fcd27ee4af6356701541319c', +            'thumbnail': 're:http://.*\.jpg', +        }, +        'params': { +            'format': 'hd', +        }, +    }, {          'url': 'http://naked-yogi.tumblr.com/post/118312946248/naked-smoking-stretching',          'md5': 'de07e5211d60d4f3a2c3df757ea9f6ab',          'info_dict': { @@ -37,6 +51,9 @@ class TumblrIE(InfoExtractor):              'title': 'naked smoking & stretching',              'upload_date': '20150506',              'timestamp': 1430931613, +            'age_limit': 18, +            'uploader_id': '1638622', +            'uploader': 'naked-yogi',          },          'add_ie': ['Vidme'],      }, { @@ -66,10 +83,38 @@ class TumblrIE(InfoExtractor):          if iframe_url is None:              return self.url_result(urlh.geturl(), 'Generic') -        iframe = self._download_webpage(iframe_url, video_id, -                                        'Downloading iframe page') -        video_url = self._search_regex(r'<source src="([^"]+)"', -                                       iframe, 'video url') +        iframe = self._download_webpage(iframe_url, video_id, 'Downloading iframe page') + +        duration = None +        sources = [] + +        sd_url = self._search_regex( +            r'<source[^>]+src=(["\'])(?P<url>.+?)\1', iframe, +            'sd video url', default=None, group='url') +        if sd_url: +            sources.append((sd_url, 'sd')) + +        options = self._parse_json( +            self._search_regex( +                r'data-crt-options=(["\'])(?P<options>.+?)\1', iframe, +                'hd video url', default='', group='options'), +            video_id, fatal=False) +        if options: +            duration = int_or_none(options.get('duration')) +            hd_url = options.get('hdUrl') +            if hd_url: +                sources.append((hd_url, 'hd')) + +        formats = [{ +            'url': video_url, +            'ext': 'mp4', +            'format_id': format_id, +            'height': int_or_none(self._search_regex( +                r'/(\d{3,4})$', video_url, 'height', default=None)), +            'quality': quality, +        } for quality, (video_url, format_id) in enumerate(sources)] + +        self._sort_formats(formats)          # The only place where you can get a title, it's not complete,          # but searching in other places doesn't work for all videos @@ -79,9 +124,9 @@ class TumblrIE(InfoExtractor):          return {              'id': video_id, -            'url': video_url, -            'ext': 'mp4',              'title': video_title,              'description': self._og_search_description(webpage, default=None),              'thumbnail': self._og_search_thumbnail(webpage, default=None), +            'duration': duration, +            'formats': formats,          } | 
