source: titan/mediathek/localhoster/lib/youtube_dl/extractor/tvc.py @ 40094

Last change on this file since 40094 was 40094, checked in by obi, 7 years ago

tithek add yoztube-dl support

File size: 3.8 KB
Line 
1# coding: utf-8
2from __future__ import unicode_literals
3
4import re
5
6from .common import InfoExtractor
7from ..utils import (
8    clean_html,
9    int_or_none,
10)
11
12
13class TVCIE(InfoExtractor):
14    _VALID_URL = r'https?://(?:www\.)?tvc\.ru/video/iframe/id/(?P<id>\d+)'
15    _TEST = {
16        'url': 'http://www.tvc.ru/video/iframe/id/74622/isPlay/false/id_stat/channel/?acc_video_id=/channel/brand/id/17/show/episodes/episode_id/39702',
17        'md5': 'bbc5ff531d1e90e856f60fc4b3afd708',
18        'info_dict': {
19            'id': '74622',
20            'ext': 'mp4',
21            'title': 'События. "События". Эфир от 22.05.2015 14:30',
22            'thumbnail': r're:^https?://.*\.jpg$',
23            'duration': 1122,
24        },
25    }
26
27    @classmethod
28    def _extract_url(cls, webpage):
29        mobj = re.search(
30            r'<iframe[^>]+?src=(["\'])(?P<url>(?:http:)?//(?:www\.)?tvc\.ru/video/iframe/id/[^"]+)\1', webpage)
31        if mobj:
32            return mobj.group('url')
33
34    def _real_extract(self, url):
35        video_id = self._match_id(url)
36
37        video = self._download_json(
38            'http://www.tvc.ru/video/json/id/%s' % video_id, video_id)
39
40        formats = []
41        for info in video.get('path', {}).get('quality', []):
42            video_url = info.get('url')
43            if not video_url:
44                continue
45            format_id = self._search_regex(
46                r'cdnvideo/([^/]+?)(?:-[^/]+?)?/', video_url,
47                'format id', default=None)
48            formats.append({
49                'url': video_url,
50                'format_id': format_id,
51                'width': int_or_none(info.get('width')),
52                'height': int_or_none(info.get('height')),
53                'tbr': int_or_none(info.get('bitrate')),
54            })
55        self._sort_formats(formats)
56
57        return {
58            'id': video_id,
59            'title': video['title'],
60            'thumbnail': video.get('picture'),
61            'duration': int_or_none(video.get('duration')),
62            'formats': formats,
63        }
64
65
66class TVCArticleIE(InfoExtractor):
67    _VALID_URL = r'https?://(?:www\.)?tvc\.ru/(?!video/iframe/id/)(?P<id>[^?#]+)'
68    _TESTS = [{
69        'url': 'http://www.tvc.ru/channel/brand/id/29/show/episodes/episode_id/39702/',
70        'info_dict': {
71            'id': '74622',
72            'ext': 'mp4',
73            'title': 'События. "События". Эфир от 22.05.2015 14:30',
74            'description': 'md5:ad7aa7db22903f983e687b8a3e98c6dd',
75            'thumbnail': r're:^https?://.*\.jpg$',
76            'duration': 1122,
77        },
78    }, {
79        'url': 'http://www.tvc.ru/news/show/id/69944',
80        'info_dict': {
81            'id': '75399',
82            'ext': 'mp4',
83            'title': 'Эксперты: в столице встал вопрос о максимально безопасных остановках',
84            'description': 'md5:f2098f71e21f309e89f69b525fd9846e',
85            'thumbnail': r're:^https?://.*\.jpg$',
86            'duration': 278,
87        },
88    }, {
89        'url': 'http://www.tvc.ru/channel/brand/id/47/show/episodes#',
90        'info_dict': {
91            'id': '2185',
92            'ext': 'mp4',
93            'title': 'Ещё не поздно. Эфир от 03.08.2013',
94            'description': 'md5:51fae9f3f8cfe67abce014e428e5b027',
95            'thumbnail': r're:^https?://.*\.jpg$',
96            'duration': 3316,
97        },
98    }]
99
100    def _real_extract(self, url):
101        webpage = self._download_webpage(url, self._match_id(url))
102        return {
103            '_type': 'url_transparent',
104            'ie_key': 'TVC',
105            'url': self._og_search_video_url(webpage),
106            'title': clean_html(self._og_search_title(webpage)),
107            'description': clean_html(self._og_search_description(webpage)),
108            'thumbnail': self._og_search_thumbnail(webpage),
109        }
Note: See TracBrowser for help on using the repository browser.