diff options
Diffstat (limited to 'youtube_dl/extractor/vidme.py')
| -rw-r--r-- | youtube_dl/extractor/vidme.py | 57 | 
1 files changed, 55 insertions, 2 deletions
| diff --git a/youtube_dl/extractor/vidme.py b/youtube_dl/extractor/vidme.py index 9a794e609..3d63ed4f0 100644 --- a/youtube_dl/extractor/vidme.py +++ b/youtube_dl/extractor/vidme.py @@ -14,7 +14,7 @@ class VidmeIE(InfoExtractor):      _VALID_URL = r'https?://vid\.me/(?:e/)?(?P<id>[\da-zA-Z]+)'      _TESTS = [{          'url': 'https://vid.me/QNB', -        'md5': 'c62f1156138dc3323902188c5b5a8bd6', +        'md5': 'f42d05e7149aeaec5c037b17e5d3dc82',          'info_dict': {              'id': 'QNB',              'ext': 'mp4', @@ -93,6 +93,39 @@ class VidmeIE(InfoExtractor):          'params': {              'skip_download': True,          }, +    }, { +        # nsfw, user-disabled +        'url': 'https://vid.me/dzGJ', +        'only_matching': True, +    }, { +        # suspended +        'url': 'https://vid.me/Ox3G', +        'only_matching': True, +    }, { +        # deleted +        'url': 'https://vid.me/KTPm', +        'only_matching': True, +    }, { +        # no formats in the API response +        'url': 'https://vid.me/e5g', +        'info_dict': { +            'id': 'e5g', +            'ext': 'mp4', +            'title': 'Video upload (e5g)', +            'thumbnail': 're:^https?://.*\.jpg', +            'timestamp': 1401480195, +            'upload_date': '20140530', +            'uploader': None, +            'uploader_id': None, +            'age_limit': 0, +            'duration': 483, +            'view_count': int, +            'like_count': int, +            'comment_count': int, +        }, +        'params': { +            'skip_download': True, +        },      }]      def _real_extract(self, url): @@ -114,12 +147,32 @@ class VidmeIE(InfoExtractor):          video = response['video'] +        if video.get('state') == 'deleted': +            raise ExtractorError( +                'Vidme said: Sorry, this video has been deleted.', +                expected=True) + +        if video.get('state') in ('user-disabled', 'suspended'): +            raise ExtractorError( +                'Vidme said: This video has been suspended either due to a copyright claim, ' +                'or for violating the terms of use.', +                expected=True) +          formats = [{              'format_id': f.get('type'),              'url': f['uri'],              'width': int_or_none(f.get('width')),              'height': int_or_none(f.get('height')), +            'preference': 0 if f.get('type', '').endswith('clip') else 1,          } for f in video.get('formats', []) if f.get('uri')] + +        if not formats and video.get('complete_url'): +            formats.append({ +                'url': video.get('complete_url'), +                'width': int_or_none(video.get('width')), +                'height': int_or_none(video.get('height')), +            }) +          self._sort_formats(formats)          title = video['title'] @@ -136,7 +189,7 @@ class VidmeIE(InfoExtractor):          return {              'id': video_id, -            'title': title, +            'title': title or 'Video upload (%s)' % video_id,              'description': description,              'thumbnail': thumbnail,              'uploader': uploader, | 
