]>
Raphaël G. Git Repositories - youtubedl/blob - youtube_dl/extractor/rutube.py 
9ca4ae147cb1e3c430de3abd9fd0927aaee2ed5a
   2  from  __future__ 
import  unicode_literals
   7  from  . common 
import  InfoExtractor
  17  class  RutubeIE ( InfoExtractor
):   19      IE_DESC 
=  'Rutube videos'   20      _VALID_URL 
=  r
'https?://rutube\.ru/(?:video|play/embed)/(?P<id>[\da-z] {32} )'   23          'url' :  'http://rutube.ru/video/3eac3b4561676c17df9132a9a1e62e3e/' ,   25              'id' :  '3eac3b4561676c17df9132a9a1e62e3e' ,   27              'title' :  'Раненный кенгуру забежал в аптеку' ,   28              'description' :  'http://www.ntdtv.ru ' ,   30              'uploader' :  'NTDRussian' ,   31              'uploader_id' :  '29790' ,   32              'upload_date' :  '20131016' ,   36              # It requires ffmpeg (m3u8 download)   37              'skip_download' :  True ,   40          'url' :  'http://rutube.ru/play/embed/a10e53b86e8f349080f718582ce4c661' ,   41          'only_matching' :  True ,   44      def  _real_extract ( self
,  url
):   45          video_id 
=  self
._ match
_ id
( url
)   46          video 
=  self
._ download
_ json
(   47              'http://rutube.ru/api/video/ %s /?format=json'  %  video_id
,   48              video_id
,  'Downloading video JSON' )   50          # Some videos don't have the author field   51          author 
=  video
. get ( 'author' )  or  {}   53          options 
=  self
._ download
_ json
(   54              'http://rutube.ru/api/play/options/ %s /?format=json'  %  video_id
,   55              video_id
,  'Downloading options JSON' )   58          for  format_id
,  format_url 
in  options
[ 'video_balancer' ]. items ():   59              ext 
=  determine_ext ( format_url
)   61                  formats
. extend ( self
._ extract
_ m
3u8_ formats
(   62                      format_url
,  video_id
,  'mp4' ,  m3u8_id
= format_id
,  fatal
= False ))   64                  formats
. extend ( self
._ extract
_ f
4 m
_ formats
(   65                      format_url
,  video_id
,  f4m_id
= format_id
,  fatal
= False ))   69                      'format_id' :  format_id
,   71          self
._ sort
_ formats
( formats
)   75              'title' :  video
[ 'title' ],   76              'description' :  video
[ 'description' ],   77              'duration' :  video
[ 'duration' ],   78              'view_count' :  video
[ 'hits' ],   80              'thumbnail' :  video
[ 'thumbnail_url' ],   81              'uploader' :  author
. get ( 'name' ),   82              'uploader_id' :  compat_str ( author
[ 'id' ])  if  author 
else None ,   83              'upload_date' :  unified_strdate ( video
[ 'created_ts' ]),   84              'age_limit' :  18  if  video
[ 'is_adult' ]  else  0 ,   88  class  RutubeEmbedIE ( InfoExtractor
):   89      IE_NAME 
=  'rutube:embed'   90      IE_DESC 
=  'Rutube embedded videos'   91      _VALID_URL 
=  'https?://rutube\.ru/(?:video|play)/embed/(?P<id>[0-9]+)'   94          'url' :  'http://rutube.ru/video/embed/6722881?vk_puid37=&vk_puid38=' ,   96              'id' :  'a10e53b86e8f349080f718582ce4c661' ,   98              'upload_date' :  '20131223' ,   99              'uploader_id' :  '297833' ,  100              'description' :  'Видео группы ★http://vk.com/foxkidsreset★ музей Fox Kids и Jetix<br/><br/> восстановлено и сделано в шикоформате subziro89 http://vk.com/subziro89' ,  101              'uploader' :  'subziro89 ILya' ,  102              'title' :  'Мистический городок Эйри в Индиан 5 серия озвучка subziro89' ,  105              'skip_download' :  'Requires ffmpeg' ,  108          'url' :  'http://rutube.ru/play/embed/8083783' ,  109          'only_matching' :  True ,  112      def  _real_extract ( self
,  url
):  113          embed_id 
=  self
._ match
_ id
( url
)  114          webpage 
=  self
._ download
_ webpage
( url
,  embed_id
)  116          canonical_url 
=  self
._ html
_ search
_ regex
(  117              r
'<link\s+rel="canonical"\s+href="([^"]+?)"' ,  webpage
,  119          return  self
. url_result ( canonical_url
,  'Rutube' )  122  class  RutubeChannelIE ( InfoExtractor
):  123      IE_NAME 
=  'rutube:channel'  124      IE_DESC 
=  'Rutube channels'  125      _VALID_URL 
=  r
'https?://rutube\.ru/tags/video/(?P<id>\d+)'  127          'url' :  'http://rutube.ru/tags/video/1800/' ,  131          'playlist_mincount' :  68 ,  134      _PAGE_TEMPLATE 
=  'http://rutube.ru/api/tags/video/ %s /?page= %s &format=json'  136      def  _extract_videos ( self
,  channel_id
,  channel_title
= None ):  138          for  pagenum 
in  itertools
. count ( 1 ):  139              page 
=  self
._ download
_ json
(  140                  self
._ PAGE
_ TEMPLATE 
% ( channel_id
,  pagenum
),  141                  channel_id
,  'Downloading page  %s '  %  pagenum
)  142              results 
=  page
[ 'results' ]  145              entries
. extend ( self
. url_result ( result
[ 'video_url' ],  'Rutube' )  for  result 
in  results
)  146              if not  page
[ 'has_next' ]:  148          return  self
. playlist_result ( entries
,  channel_id
,  channel_title
)  150      def  _real_extract ( self
,  url
):  151          mobj 
=  re
. match ( self
._ VALID
_U RL
,  url
)  152          channel_id 
=  mobj
. group ( 'id' )  153          return  self
._ extract
_ videos
( channel_id
)  156  class  RutubeMovieIE ( RutubeChannelIE
):  157      IE_NAME 
=  'rutube:movie'  158      IE_DESC 
=  'Rutube movies'  159      _VALID_URL 
=  r
'https?://rutube\.ru/metainfo/tv/(?P<id>\d+)'  162      _MOVIE_TEMPLATE 
=  'http://rutube.ru/api/metainfo/tv/ %s /?format=json'  163      _PAGE_TEMPLATE 
=  'http://rutube.ru/api/metainfo/tv/ %s /video?page= %s &format=json'  165      def  _real_extract ( self
,  url
):  166          movie_id 
=  self
._ match
_ id
( url
)  167          movie 
=  self
._ download
_ json
(  168              self
._ MOVIE
_ TEMPLATE 
%  movie_id
,  movie_id
,  169              'Downloading movie JSON' )  170          movie_name 
=  movie
[ 'name' ]  171          return  self
._ extract
_ videos
( movie_id
,  movie_name
)  174  class  RutubePersonIE ( RutubeChannelIE
):  175      IE_NAME 
=  'rutube:person'  176      IE_DESC 
=  'Rutube person videos'  177      _VALID_URL 
=  r
'https?://rutube\.ru/video/person/(?P<id>\d+)'  179          'url' :  'http://rutube.ru/video/person/313878/' ,  183          'playlist_mincount' :  37 ,  186      _PAGE_TEMPLATE 
=  'http://rutube.ru/api/video/person/ %s /?page= %s &format=json'