diff options
Diffstat (limited to 'youtube_dl/extractor/extremetube.py')
| -rw-r--r-- | youtube_dl/extractor/extremetube.py | 61 | 
1 files changed, 39 insertions, 22 deletions
| diff --git a/youtube_dl/extractor/extremetube.py b/youtube_dl/extractor/extremetube.py index c826a5404..3403581fd 100644 --- a/youtube_dl/extractor/extremetube.py +++ b/youtube_dl/extractor/extremetube.py @@ -3,23 +3,20 @@ from __future__ import unicode_literals  import re  from .common import InfoExtractor -from ..compat import ( -    compat_parse_qs, -    compat_urllib_request, -)  from ..utils import ( -    qualities, +    int_or_none, +    sanitized_Request,      str_to_int,  )  class ExtremeTubeIE(InfoExtractor): -    _VALID_URL = r'https?://(?:www\.)?(?P<url>extremetube\.com/.*?video/.+?(?P<id>[0-9]+))(?:[/?&]|$)' +    _VALID_URL = r'https?://(?:www\.)?extremetube\.com/(?:[^/]+/)?video/(?P<id>[^/#?&]+)'      _TESTS = [{          'url': 'http://www.extremetube.com/video/music-video-14-british-euro-brit-european-cumshots-swallow-652431',          'md5': '344d0c6d50e2f16b06e49ca011d8ac69',          'info_dict': { -            'id': '652431', +            'id': 'music-video-14-british-euro-brit-european-cumshots-swallow-652431',              'ext': 'mp4',              'title': 'Music Video 14 british euro brit european cumshots swallow',              'uploader': 'unknown', @@ -29,14 +26,18 @@ class ExtremeTubeIE(InfoExtractor):      }, {          'url': 'http://www.extremetube.com/gay/video/abcde-1234',          'only_matching': True, +    }, { +        'url': 'http://www.extremetube.com/video/latina-slut-fucked-by-fat-black-dick', +        'only_matching': True, +    }, { +        'url': 'http://www.extremetube.com/video/652431', +        'only_matching': True,      }]      def _real_extract(self, url): -        mobj = re.match(self._VALID_URL, url) -        video_id = mobj.group('id') -        url = 'http://www.' + mobj.group('url') +        video_id = self._match_id(url) -        req = compat_urllib_request.Request(url) +        req = sanitized_Request(url)          req.add_header('Cookie', 'age_verified=1')          webpage = self._download_webpage(req, video_id) @@ -49,20 +50,36 @@ class ExtremeTubeIE(InfoExtractor):              r'Views:\s*</strong>\s*<span>([\d,\.]+)</span>',              webpage, 'view count', fatal=False)) -        flash_vars = compat_parse_qs(self._search_regex( -            r'<param[^>]+?name="flashvars"[^>]+?value="([^"]+)"', webpage, 'flash vars')) +        flash_vars = self._parse_json( +            self._search_regex( +                r'var\s+flashvars\s*=\s*({.+?});', webpage, 'flash vars'), +            video_id)          formats = [] -        quality = qualities(['180p', '240p', '360p', '480p', '720p', '1080p']) -        for k, vals in flash_vars.items(): -            m = re.match(r'quality_(?P<quality>[0-9]+p)$', k) -            if m is not None: -                formats.append({ -                    'format_id': m.group('quality'), -                    'quality': quality(m.group('quality')), -                    'url': vals[0], +        for quality_key, video_url in flash_vars.items(): +            height = int_or_none(self._search_regex( +                r'quality_(\d+)[pP]$', quality_key, 'height', default=None)) +            if not height: +                continue +            f = { +                'url': video_url, +            } +            mobj = re.search( +                r'/(?P<height>\d{3,4})[pP]_(?P<bitrate>\d+)[kK]_\d+', video_url) +            if mobj: +                height = int(mobj.group('height')) +                bitrate = int(mobj.group('bitrate')) +                f.update({ +                    'format_id': '%dp-%dk' % (height, bitrate), +                    'height': height, +                    'tbr': bitrate,                  }) - +            else: +                f.update({ +                    'format_id': '%dp' % height, +                    'height': height, +                }) +            formats.append(f)          self._sort_formats(formats)          return { | 
