diff options
| author | Sergey M․ <dstftw@gmail.com> | 2015-10-05 22:30:38 +0600 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2015-10-05 22:30:38 +0600 | 
| commit | 5820c4a29ea3781c47f6249c179a081e28eeeb64 (patch) | |
| tree | 30e83f804e316ef939636296746c0fb7b255cb9a /youtube_dl/extractor/ustream.py | |
| parent | 7fd4ed9939d7c467c61663cad7189ee8ad27c89b (diff) | |
[ustream] Switch extraction to api
Diffstat (limited to 'youtube_dl/extractor/ustream.py')
| -rw-r--r-- | youtube_dl/extractor/ustream.py | 69 | 
1 files changed, 37 insertions, 32 deletions
| diff --git a/youtube_dl/extractor/ustream.py b/youtube_dl/extractor/ustream.py index 18add908e..3065c9f31 100644 --- a/youtube_dl/extractor/ustream.py +++ b/youtube_dl/extractor/ustream.py @@ -7,7 +7,11 @@ from .common import InfoExtractor  from ..compat import (      compat_urlparse,  ) -from ..utils import ExtractorError +from ..utils import ( +    ExtractorError, +    int_or_none, +    float_or_none, +)  class UstreamIE(InfoExtractor): @@ -54,46 +58,47 @@ class UstreamIE(InfoExtractor):          params = self._download_json('https://api.ustream.tv/videos/' + video_id + '.json', video_id) -        if 'error' in params: -            raise ExtractorError(params['error']['message'], expected=True) - -        video_url = params['video']['media_urls']['flv'] - -        webpage = self._download_webpage(url, video_id) - -        self.report_extraction(video_id) +        error = params.get('error') +        if error: +            raise ExtractorError( +                '%s returned error: %s' % (self.IE_NAME, error), expected=True) -        video_title = self._html_search_regex(r'data-title="(?P<title>.+)"', -                                              webpage, 'title', default=None) +        video = params['video'] -        if not video_title: -            try: -                video_title = params['moduleConfig']['meta']['title'] -            except KeyError: -                pass - -        if not video_title: -            video_title = 'Ustream video ' + video_id +        formats = [{ +            'id': format_id, +            'url': video_url, +            'ext': format_id, +        } for format_id, video_url in video['media_urls'].items()] +        self._sort_formats(formats) -        uploader = self._html_search_regex(r'data-content-type="channel".*?>(?P<uploader>.*?)</a>', -                                           webpage, 'uploader', fatal=False, flags=re.DOTALL, default=None) +        title = video['title'] +        description = video.get('description') +        timestamp = int_or_none(video.get('created_at')) +        duration = float_or_none(video.get('length')) +        filesize = float_or_none(video.get('file_size')) +        view_count = int_or_none(video.get('views')) -        if not uploader: -            try: -                uploader = params['moduleConfig']['meta']['userName'] -            except KeyError: -                uploader = None +        uploader = video.get('owner', {}).get('username') +        uploader_id = video.get('owner', {}).get('id') -        thumbnail = self._html_search_regex(r'<link rel="image_src" href="(?P<thumb>.*?)"', -                                            webpage, 'thumbnail', fatal=False) +        thumbnails = [{ +            'id': thumbnail_id, +            'url': thumbnail_url, +        } for thumbnail_id, thumbnail_url in video.get('thumbnail', {}).items()]          return {              'id': video_id, -            'url': video_url, -            'ext': 'flv', -            'title': video_title, +            'title': title, +            'description': description, +            'thumbnails': thumbnails, +            'timestamp': timestamp, +            'duration': duration, +            'filesize': filesize, +            'view_count': view_count,              'uploader': uploader, -            'thumbnail': thumbnail, +            'uploader_id': uploader_id, +            'formats': formats,          } | 
