diff options
Diffstat (limited to 'youtube_dl/extractor/yinyuetai.py')
| -rw-r--r-- | youtube_dl/extractor/yinyuetai.py | 56 | 
1 files changed, 56 insertions, 0 deletions
| diff --git a/youtube_dl/extractor/yinyuetai.py b/youtube_dl/extractor/yinyuetai.py new file mode 100644 index 000000000..834d860af --- /dev/null +++ b/youtube_dl/extractor/yinyuetai.py @@ -0,0 +1,56 @@ +# coding: utf-8 +from __future__ import unicode_literals + +from .common import InfoExtractor +from ..utils import ExtractorError + + +class YinYueTaiIE(InfoExtractor): +    IE_NAME = 'yinyuetai:video' +    IE_DESC = '音悦Tai' +    _VALID_URL = r'https?://v\.yinyuetai\.com/video(?:/h5)?/(?P<id>[0-9]+)' +    _TESTS = [{ +        'url': 'http://v.yinyuetai.com/video/2322376', +        'md5': '6e3abe28d38e3a54b591f9f040595ce0', +        'info_dict': { +            'id': '2322376', +            'ext': 'mp4', +            'title': '少女时代_PARTY_Music Video Teaser', +            'creator': '少女时代', +            'duration': 25, +            'thumbnail': 're:^https?://.*\.jpg$', +        }, +    }, { +        'url': 'http://v.yinyuetai.com/video/h5/2322376', +        'only_matching': True, +    }] + +    def _real_extract(self, url): +        video_id = self._match_id(url) + +        info = self._download_json( +            'http://ext.yinyuetai.com/main/get-h-mv-info?json=true&videoId=%s' % video_id, video_id, +            'Downloading mv info')['videoInfo']['coreVideoInfo'] + +        if info['error']: +            raise ExtractorError(info['errorMsg'], expected=True) + +        formats = [{ +            'url': format_info['videoUrl'], +            'format_id': format_info['qualityLevel'], +            'format': format_info.get('qualityLevelName'), +            'filesize': format_info.get('fileSize'), +            # though URLs ends with .flv, the downloaded files are in fact mp4 +            'ext': 'mp4', +            'tbr': format_info.get('bitrate'), +        } for format_info in info['videoUrlModels']] +        self._sort_formats(formats) + +        return { +            'id': video_id, +            'title': info['videoName'], +            'thumbnail': info.get('bigHeadImage'), +            'creator': info.get('artistNames'), +            'duration': info.get('duration'), +            'formats': formats, +        } | 
