diff options
Diffstat (limited to 'youtube_dl/extractor/carambatv.py')
| -rw-r--r-- | youtube_dl/extractor/carambatv.py | 108 | 
1 files changed, 108 insertions, 0 deletions
diff --git a/youtube_dl/extractor/carambatv.py b/youtube_dl/extractor/carambatv.py new file mode 100644 index 000000000..b57b86af7 --- /dev/null +++ b/youtube_dl/extractor/carambatv.py @@ -0,0 +1,108 @@ +# coding: utf-8 +from __future__ import unicode_literals + +from .common import InfoExtractor +from ..compat import compat_str +from ..utils import ( +    float_or_none, +    int_or_none, +    try_get, +) + +from .videomore import VideomoreIE + + +class CarambaTVIE(InfoExtractor): +    _VALID_URL = r'(?:carambatv:|https?://video1\.carambatv\.ru/v/)(?P<id>\d+)' +    _TESTS = [{ +        'url': 'http://video1.carambatv.ru/v/191910501', +        'md5': '2f4a81b7cfd5ab866ee2d7270cb34a2a', +        'info_dict': { +            'id': '191910501', +            'ext': 'mp4', +            'title': '[BadComedian] - Разборка в Маниле (Абсолютный обзор)', +            'thumbnail': r're:^https?://.*\.jpg', +            'duration': 2678.31, +        }, +    }, { +        'url': 'carambatv:191910501', +        'only_matching': True, +    }] + +    def _real_extract(self, url): +        video_id = self._match_id(url) + +        video = self._download_json( +            'http://video1.carambatv.ru/v/%s/videoinfo.js' % video_id, +            video_id) + +        title = video['title'] + +        base_url = video.get('video') or 'http://video1.carambatv.ru/v/%s/' % video_id + +        formats = [{ +            'url': base_url + f['fn'], +            'height': int_or_none(f.get('height')), +            'format_id': '%sp' % f['height'] if f.get('height') else None, +        } for f in video['qualities'] if f.get('fn')] +        self._sort_formats(formats) + +        thumbnail = video.get('splash') +        duration = float_or_none(try_get( +            video, lambda x: x['annotations'][0]['end_time'], compat_str)) + +        return { +            'id': video_id, +            'title': title, +            'thumbnail': thumbnail, +            'duration': duration, +            'formats': formats, +        } + + +class CarambaTVPageIE(InfoExtractor): +    _VALID_URL = r'https?://carambatv\.ru/(?:[^/]+/)+(?P<id>[^/?#&]+)' +    _TEST = { +        'url': 'http://carambatv.ru/movie/bad-comedian/razborka-v-manile/', +        'md5': 'a49fb0ec2ad66503eeb46aac237d3c86', +        'info_dict': { +            'id': '475222', +            'ext': 'flv', +            'title': '[BadComedian] - Разборка в Маниле (Абсолютный обзор)', +            'thumbnail': r're:^https?://.*\.jpg', +            # duration reported by videomore is incorrect +            'duration': int, +        }, +        'add_ie': [VideomoreIE.ie_key()], +    } + +    def _real_extract(self, url): +        video_id = self._match_id(url) + +        webpage = self._download_webpage(url, video_id) + +        videomore_url = VideomoreIE._extract_url(webpage) +        if not videomore_url: +            videomore_id = self._search_regex( +                r'getVMCode\s*\(\s*["\']?(\d+)', webpage, 'videomore id', +                default=None) +            if videomore_id: +                videomore_url = 'videomore:%s' % videomore_id +        if videomore_url: +            title = self._og_search_title(webpage) +            return { +                '_type': 'url_transparent', +                'url': videomore_url, +                'ie_key': VideomoreIE.ie_key(), +                'title': title, +            } + +        video_url = self._og_search_property('video:iframe', webpage, default=None) + +        if not video_url: +            video_id = self._search_regex( +                r'(?:video_id|crmb_vuid)\s*[:=]\s*["\']?(\d+)', +                webpage, 'video id') +            video_url = 'carambatv:%s' % video_id + +        return self.url_result(video_url, CarambaTVIE.ie_key())  | 
