X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2Fextractor%2Fvesti.py;h=a0c59a2e0e1cb8fca2e0e3eb3ec2e4edce2918bb;hb=9e1a5b845586a0a5431fb72467142046d8571e6f;hp=84268439a823af94c3bfbb1b0794b6c6857c479b;hpb=d37c07c57514b42b5b4523e619293ce77e40af79;p=youtube-dl diff --git a/youtube_dl/extractor/vesti.py b/youtube_dl/extractor/vesti.py index 84268439a..a0c59a2e0 100644 --- a/youtube_dl/extractor/vesti.py +++ b/youtube_dl/extractor/vesti.py @@ -4,16 +4,13 @@ from __future__ import unicode_literals import re from .common import InfoExtractor -from ..utils import ( - ExtractorError, - int_or_none -) +from ..utils import ExtractorError +from .rutv import RUTVIE class VestiIE(InfoExtractor): - IE_NAME = 'vesti' IE_DESC = 'Вести.Ru' - _VALID_URL = r'http://(?:.+?\.)?(?:vesti\.ru|russia\.tv)/(?P.+)' + _VALID_URL = r'http://(?:.+?\.)?vesti\.ru/(?P.+)' _TESTS = [ { @@ -72,34 +69,6 @@ class VestiIE(InfoExtractor): 'skip_download': True, }, }, - { - 'url': 'http://russia.tv/video/show/brand_id/5169/episode_id/970443/video_id/975648', - 'info_dict': { - 'id': '771852', - 'ext': 'mp4', - 'title': 'Прямой эфир. Жертвы загадочной болезни: смерть от старости в 17 лет', - 'description': 'md5:b81c8c55247a4bd996b43ce17395b2d8', - 'duration': 3096, - }, - 'params': { - # m3u8 download - 'skip_download': True, - }, - }, - { - 'url': 'http://russia.tv/brand/show/brand_id/57638', - 'info_dict': { - 'id': '774016', - 'ext': 'mp4', - 'title': 'Чужой в семье Сталина', - 'description': '', - 'duration': 2539, - }, - 'params': { - # m3u8 download - 'skip_download': True, - }, - }, { 'url': 'http://sochi2014.vesti.ru/video/index/video_id/766403', 'info_dict': { @@ -113,7 +82,7 @@ class VestiIE(InfoExtractor): # m3u8 download 'skip_download': True, }, - 'skip': 'Blocked outside Russia' + 'skip': 'Blocked outside Russia', }, { 'url': 'http://sochi2014.vesti.ru/live/play/live_id/301', @@ -128,7 +97,7 @@ class VestiIE(InfoExtractor): 'skip_download': True, }, 'skip': 'Translation has finished' - } + }, ] def _real_extract(self, url): @@ -138,99 +107,15 @@ class VestiIE(InfoExtractor): page = self._download_webpage(url, video_id, 'Downloading page') mobj = re.search( - r']+?content="http://www\.vesti\.ru/i/flvplayer_videoHost\.swf\?vid=(?P\d+)', page) if mobj: video_id = mobj.group('id') page = self._download_webpage('http://www.vesti.ru/only_video.html?vid=%s' % video_id, video_id, - 'Downloading video page') - - mobj = re.search( - r'[^/]+)/id/(?P\d+)[^"]*".*?>', - page) - - if not mobj: - raise ExtractorError('No media found', expected=True) - - video_type = mobj.group('type') - video_id = mobj.group('id') - - json_data = self._download_json( - 'http://player.rutv.ru/iframe/%splay/id/%s' % ('live-' if video_type == 'live' else '', video_id), - video_id, 'Downloading JSON') - - if json_data['errors']: - raise ExtractorError('vesti returned error: %s' % json_data['errors'], expected=True) - - playlist = json_data['data']['playlist'] - medialist = playlist['medialist'] - media = medialist[0] - - if media['errors']: - raise ExtractorError('vesti returned error: %s' % media['errors'], expected=True) - - view_count = playlist.get('count_views') - priority_transport = playlist['priority_transport'] - - thumbnail = media['picture'] - width = int_or_none(media['width']) - height = int_or_none(media['height']) - description = media['anons'] - title = media['title'] - duration = int_or_none(media.get('duration')) - - formats = [] - - for transport, links in media['sources'].items(): - for quality, url in links.items(): - if transport == 'rtmp': - mobj = re.search(r'^(?Prtmp://[^/]+/(?P.+))/(?P.+)$', url) - if not mobj: - continue - fmt = { - 'url': mobj.group('url'), - 'play_path': mobj.group('playpath'), - 'app': mobj.group('app'), - 'page_url': 'http://player.rutv.ru', - 'player_url': 'http://player.rutv.ru/flash2v/osmf.swf?i=22', - 'rtmp_live': True, - 'ext': 'flv', - 'vbr': int(quality), - } - elif transport == 'm3u8': - fmt = { - 'url': url, - 'ext': 'mp4', - } - else: - fmt = { - 'url': url - } - fmt.update({ - 'width': width, - 'height': height, - 'format_id': '%s-%s' % (transport, quality), - 'preference': -1 if priority_transport == transport else -2, - }) - formats.append(fmt) - - if not formats: - raise ExtractorError('No media links available for %s' % video_id) + 'Downloading video page') - self._sort_formats(formats) + rutv_url = RUTVIE._extract_url(page) + if rutv_url: + return self.url_result(rutv_url, 'RUTV') - return { - 'id': video_id, - 'title': title, - 'description': description, - 'thumbnail': thumbnail, - 'view_count': view_count, - 'duration': duration, - 'formats': formats, - } \ No newline at end of file + raise ExtractorError('No video found', expected=True)