]>
Raphaël G. Git Repositories - youtubedl/blob - youtube_dl/extractor/vesti.py
f51d4dcfa6c0cbda5fb8c53d0421ac099cea8295
   2 from __future__ 
import unicode_literals
 
   6 from .common 
import InfoExtractor
 
  13 class VestiIE(InfoExtractor
): 
  16     _VALID_URL 
= r
'http://(?:.+?\.)?vesti\.ru/(?P<id>.+)' 
  20             'url': 'http://www.vesti.ru/videos?vid=575582&cid=1', 
  24                 'title': 'Вести.net: биткоины в России не являются законными', 
  25                 'description': 'md5:d4bb3859dc1177b28a94c5014c35a36b', 
  30                 'skip_download': True, 
  34             'url': 'http://www.vesti.ru/only_video.html?vid=576180', 
  38                 'title': 'США заморозило, Британию затопило', 
  39                 'description': 'md5:f0ed0695ec05aed27c56a70a58dc4cc1', 
  44                 'skip_download': True, 
  48             'url': 'http://sochi2014.vesti.ru/video/index/video_id/766403', 
  52                 'title': 'XXII зимние Олимпийские игры. Российские хоккеисты стартовали на Олимпиаде с победы', 
  53                 'description': 'md5:55805dfd35763a890ff50fa9e35e31b3', 
  58                 'skip_download': True, 
  60             'skip': 'Blocked outside Russia' 
  63             'url': 'http://sochi2014.vesti.ru/live/play/live_id/301', 
  67                 'title': 'Сочи-2014. Биатлон. Индивидуальная гонка. Мужчины ', 
  68                 'description': 'md5:9e0ed5c9d2fa1efbfdfed90c9a6d179c', 
  72                 'skip_download': True, 
  74             'skip': 'Translation has finished' 
  78     def _real_extract(self
, url
): 
  79         mobj 
= re
.match(self
._VALID
_URL
, url
) 
  80         video_id 
= mobj
.group('id') 
  82         page 
= self
._download
_webpage
(url
, video_id
, 'Downloading page') 
  84         mobj 
= re
.search(r
'<meta property="og:video" content=".+?\.swf\?v?id=(?P<id>\d+).*?" />', page
) 
  87             video_id 
= mobj
.group('id') 
  90                 r
'<iframe.+?src="http://player\.rutv\.ru/iframe/(?P<type>[^/]+)/id/(?P<id>\d+)[^"]*".*?></iframe>', page
) 
  93                 raise ExtractorError('No media found') 
  95             video_type 
= mobj
.group('type') 
  96             video_id 
= mobj
.group('id') 
  98         json_data 
= self
._download
_json
( 
  99             'http://player.rutv.ru/iframe/%splay/id/%s' % ('live-' if video_type 
== 'live' else '', video_id
), 
 100             video_id
, 'Downloading JSON') 
 102         if json_data
['errors']: 
 103             raise ExtractorError('vesti returned error: %s' % json_data
['errors'], expected
=True) 
 105         playlist 
= json_data
['data']['playlist'] 
 106         medialist 
= playlist
['medialist'] 
 110             raise ExtractorError('vesti returned error: %s' % media
['errors'], expected
=True) 
 112         view_count 
= playlist
.get('count_views') 
 113         priority_transport 
= playlist
['priority_transport'] 
 115         thumbnail 
= media
['picture'] 
 116         width 
= media
['width'] 
 117         height 
= media
['height'] 
 118         description 
= media
['anons'] 
 119         title 
= media
['title'] 
 120         duration 
= int_or_none(media
.get('duration')) 
 124         for transport
, links 
in media
['sources'].items(): 
 125             for quality
, url 
in links
.items(): 
 126                 if transport 
== 'rtmp': 
 127                     mobj 
= re
.search(r
'^(?P<url>rtmp://[^/]+/(?P<app>.+))/(?P<playpath>.+)$', url
) 
 131                         'url': mobj
.group('url'), 
 132                         'play_path': mobj
.group('playpath'), 
 133                         'app': mobj
.group('app'), 
 134                         'page_url': 'http://player.rutv.ru', 
 135                         'player_url': 'http://player.rutv.ru/flash2v/osmf.swf?i=22', 
 140                 elif transport 
== 'm3u8': 
 152                     'format_id': '%s-%s' % (transport
, quality
), 
 153                     'preference': -1 if priority_transport 
== transport 
else -2, 
 158             raise ExtractorError('No media links available for %s' % video_id
) 
 160         self
._sort
_formats
(formats
) 
 165             'description': description
, 
 166             'thumbnail': thumbnail
, 
 167             'view_count': view_count
, 
 168             'duration': duration
,