]>
Raphaël G. Git Repositories - youtubedl/blob - youtube_dl/extractor/rutube.py
   2 from __future__ 
import unicode_literals
 
   7 from .common 
import InfoExtractor
 
  15 class RutubeIE(InfoExtractor
): 
  17     IE_DESC 
= 'Rutube videos' 
  18     _VALID_URL 
= r
'https?://rutube\.ru/video/(?P<id>[\da-z]{32})' 
  21         'url': 'http://rutube.ru/video/3eac3b4561676c17df9132a9a1e62e3e/', 
  23             'id': '3eac3b4561676c17df9132a9a1e62e3e', 
  25             'title': 'Раненный кенгуру забежал в аптеку', 
  26             'description': 'http://www.ntdtv.ru ', 
  28             'uploader': 'NTDRussian', 
  29             'uploader_id': '29790', 
  30             'upload_date': '20131016', 
  33             # It requires ffmpeg (m3u8 download) 
  34             'skip_download': True, 
  38     def _real_extract(self
, url
): 
  39         mobj 
= re
.match(self
._VALID
_URL
, url
) 
  40         video_id 
= mobj
.group('id') 
  42         video 
= self
._download
_json
( 
  43             'http://rutube.ru/api/video/%s/?format=json' % video_id
, 
  44             video_id
, 'Downloading video JSON') 
  46         # Some videos don't have the author field 
  47         author 
= video
.get('author') or {} 
  49         options 
= self
._download
_json
( 
  50             'http://rutube.ru/api/play/options/%s/?format=json' % video_id
, 
  51             video_id
, 'Downloading options JSON') 
  53         m3u8_url 
= options
['video_balancer'].get('m3u8') 
  55             raise ExtractorError('Couldn\'t find m3u8 manifest url') 
  59             'title': video
['title'], 
  60             'description': video
['description'], 
  61             'duration': video
['duration'], 
  62             'view_count': video
['hits'], 
  65             'thumbnail': video
['thumbnail_url'], 
  66             'uploader': author
.get('name'), 
  67             'uploader_id': compat_str(author
['id']) if author 
else None, 
  68             'upload_date': unified_strdate(video
['created_ts']), 
  69             'age_limit': 18 if video
['is_adult'] else 0, 
  73 class RutubeChannelIE(InfoExtractor
): 
  74     IE_NAME 
= 'rutube:channel' 
  75     IE_DESC 
= 'Rutube channels' 
  76     _VALID_URL 
= r
'http://rutube\.ru/tags/video/(?P<id>\d+)' 
  78     _PAGE_TEMPLATE 
= 'http://rutube.ru/api/tags/video/%s/?page=%s&format=json' 
  80     def _extract_videos(self
, channel_id
, channel_title
=None): 
  82         for pagenum 
in itertools
.count(1): 
  83             page 
= self
._download
_json
( 
  84                 self
._PAGE
_TEMPLATE 
% (channel_id
, pagenum
), 
  85                 channel_id
, 'Downloading page %s' % pagenum
) 
  86             results 
= page
['results'] 
  89             entries
.extend(self
.url_result(result
['video_url'], 'Rutube') for result 
in results
) 
  90             if not page
['has_next']: 
  92         return self
.playlist_result(entries
, channel_id
, channel_title
) 
  94     def _real_extract(self
, url
): 
  95         mobj 
= re
.match(self
._VALID
_URL
, url
) 
  96         channel_id 
= mobj
.group('id') 
  97         return self
._extract
_videos
(channel_id
) 
 100 class RutubeMovieIE(RutubeChannelIE
): 
 101     IE_NAME 
= 'rutube:movie' 
 102     IE_DESC 
= 'Rutube movies' 
 103     _VALID_URL 
= r
'http://rutube\.ru/metainfo/tv/(?P<id>\d+)' 
 105     _MOVIE_TEMPLATE 
= 'http://rutube.ru/api/metainfo/tv/%s/?format=json' 
 106     _PAGE_TEMPLATE 
= 'http://rutube.ru/api/metainfo/tv/%s/video?page=%s&format=json' 
 108     def _real_extract(self
, url
): 
 109         mobj 
= re
.match(self
._VALID
_URL
, url
) 
 110         movie_id 
= mobj
.group('id') 
 111         movie 
= self
._download
_json
( 
 112             self
._MOVIE
_TEMPLATE 
% movie_id
, movie_id
, 
 113             'Downloading movie JSON') 
 114         movie_name 
= movie
['name'] 
 115         return self
._extract
_videos
(movie_id
, movie_name
) 
 118 class RutubePersonIE(RutubeChannelIE
): 
 119     IE_NAME 
= 'rutube:person' 
 120     IE_DESC 
= 'Rutube person videos' 
 121     _VALID_URL 
= r
'http://rutube\.ru/video/person/(?P<id>\d+)' 
 123     _PAGE_TEMPLATE 
= 'http://rutube.ru/api/video/person/%s/?page=%s&format=json'