diff options
Diffstat (limited to 'youtube_dl/extractor/vube.py')
| -rw-r--r-- | youtube_dl/extractor/vube.py | 96 | 
1 files changed, 68 insertions, 28 deletions
| diff --git a/youtube_dl/extractor/vube.py b/youtube_dl/extractor/vube.py index 7b77865cb..2544c24bd 100644 --- a/youtube_dl/extractor/vube.py +++ b/youtube_dl/extractor/vube.py @@ -3,7 +3,10 @@ from __future__ import unicode_literals  import re  from .common import InfoExtractor -from ..utils import int_or_none +from ..utils import ( +    int_or_none, +    compat_str, +)  class VubeIE(InfoExtractor): @@ -20,12 +23,15 @@ class VubeIE(InfoExtractor):                  'ext': 'mp4',                  'title': 'Chiara Grispo - Price Tag by Jessie J',                  'description': 'md5:8ea652a1f36818352428cb5134933313', -                'thumbnail': 'http://frame.thestaticvube.com/snap/228x128/102e7e63057-5ebc-4f5c-4065-6ce4ebde131f.jpg', +                'thumbnail': 're:^http://frame\.thestaticvube\.com/snap/[0-9x]+/102e7e63057-5ebc-4f5c-4065-6ce4ebde131f\.jpg$',                  'uploader': 'Chiara.Grispo', -                'uploader_id': '1u3hX0znhP',                  'timestamp': 1388743358,                  'upload_date': '20140103', -                'duration': 170.56 +                'duration': 170.56, +                'like_count': int, +                'dislike_count': int, +                'comment_count': int, +                'categories': ['pop', 'music', 'cover', 'singing', 'jessie j', 'price tag', 'chiara grispo'],              }          },          { @@ -36,12 +42,33 @@ class VubeIE(InfoExtractor):                  'ext': 'mp4',                  'title': 'My 7 year old Sister and I singing "Alive" by Krewella',                  'description': 'md5:40bcacb97796339f1690642c21d56f4a', -                'thumbnail': 'http://frame.thestaticvube.com/snap/228x128/102265d5a9f-0f17-4f6b-5753-adf08484ee1e.jpg', +                'thumbnail': 're:^http://frame\.thestaticvube\.com/snap/[0-9x]+/102265d5a9f-0f17-4f6b-5753-adf08484ee1e\.jpg$',                  'uploader': 'Seraina', -                'uploader_id': 'XU9VE2BQ2q',                  'timestamp': 1396492438,                  'upload_date': '20140403', -                'duration': 240.107 +                'duration': 240.107, +                'like_count': int, +                'dislike_count': int, +                'comment_count': int, +                'categories': ['seraina', 'jessica', 'krewella', 'alive'], +            } +        }, { +            'url': 'http://vube.com/vote/Siren+Gene/0nmsMY5vEq?n=2&t=s', +            'md5': '0584fc13b50f887127d9d1007589d27f', +            'info_dict': { +                'id': '0nmsMY5vEq', +                'ext': 'mp4', +                'title': 'Frozen - Let It Go Cover by Siren Gene', +                'description': 'My rendition of "Let It Go" originally sung by Idina Menzel.', +                'thumbnail': 're:^http://frame\.thestaticvube\.com/snap/[0-9x]+/10283ab622a-86c9-4681-51f2-30d1f65774af\.jpg$', +                'uploader': 'Siren', +                'timestamp': 1395448018, +                'upload_date': '20140322', +                'duration': 221.788, +                'like_count': int, +                'dislike_count': int, +                'comment_count': int, +                'categories': ['let it go', 'cover', 'idina menzel', 'frozen', 'singing', 'disney', 'siren gene'],              }          }      ] @@ -51,39 +78,52 @@ class VubeIE(InfoExtractor):          video_id = mobj.group('id')          video = self._download_json( -            'http://vube.com/api/v2/video/%s' % video_id, video_id, 'Downloading video JSON') +            'http://vube.com/t-api/v1/video/%s' % video_id, video_id, 'Downloading video JSON')          public_id = video['public_id'] -        formats = [ -            { -                'url': 'http://video.thestaticvube.com/video/%s/%s.mp4' % (fmt['media_resolution_id'], public_id), -                'height': int(fmt['height']), -                'abr': int(fmt['audio_bitrate']), -                'vbr': int(fmt['video_bitrate']), -                'format_id': fmt['media_resolution_id'] -            } for fmt in video['mtm'] if fmt['transcoding_status'] == 'processed' -        ] +        formats = [] + +        for media in video['media'].get('video', []) + video['media'].get('audio', []): +            if media['transcoding_status'] != 'processed': +                continue +            fmt = { +                'url': 'http://video.thestaticvube.com/video/%s/%s.mp4' % (media['media_resolution_id'], public_id), +                'abr': int(media['audio_bitrate']), +                'format_id': compat_str(media['media_resolution_id']), +            } +            vbr = int(media['video_bitrate']) +            if vbr: +                fmt.update({ +                    'vbr': vbr, +                    'height': int(media['height']), +                }) +            formats.append(fmt)          self._sort_formats(formats)          title = video['title']          description = video.get('description') -        thumbnail = video['thumbnail_src'] -        if thumbnail.startswith('//'): -            thumbnail = 'http:' + thumbnail -        uploader = video['user_alias'] -        uploader_id = video['user_url_id'] -        timestamp = int(video['upload_time']) +        thumbnail = self._proto_relative_url(video.get('thumbnail_src'), scheme='http:') +        uploader = video.get('user_alias') or video.get('channel') +        timestamp = int_or_none(video.get('upload_time'))          duration = video['duration']          view_count = video.get('raw_view_count')          like_count = video.get('total_likes') -        dislike_count= video.get('total_hates') +        dislike_count = video.get('total_hates') -        comment = self._download_json( -            'http://vube.com/api/video/%s/comment' % video_id, video_id, 'Downloading video comment JSON') +        comments = video.get('comments') +        comment_count = None +        if comments is None: +            comment_data = self._download_json( +                'http://vube.com/api/video/%s/comment' % video_id, +                video_id, 'Downloading video comment JSON', fatal=False) +            if comment_data is not None: +                comment_count = int_or_none(comment_data.get('total')) +        else: +            comment_count = len(comments) -        comment_count = int_or_none(comment.get('total')) +        categories = [tag['text'] for tag in video['tags']]          return {              'id': video_id, @@ -92,11 +132,11 @@ class VubeIE(InfoExtractor):              'description': description,              'thumbnail': thumbnail,              'uploader': uploader, -            'uploader_id': uploader_id,              'timestamp': timestamp,              'duration': duration,              'view_count': view_count,              'like_count': like_count,              'dislike_count': dislike_count,              'comment_count': comment_count, +            'categories': categories,          } | 
