]>
Raphaël G. Git Repositories - youtubedl/blob - youtube_dl/extractor/rutube.py
e3e9bc07ffbf9cfbfb6a092f6f88583a31a012fb
5 from .common
import InfoExtractor
13 class RutubeIE(InfoExtractor
):
14 _VALID_URL
= r
'https?://rutube\.ru/video/(?P<long_id>\w+)'
17 u
'url': u
'http://rutube.ru/video/3eac3b4561676c17df9132a9a1e62e3e/',
18 u
'file': u
'3eac3b4561676c17df9132a9a1e62e3e.mp4',
20 u
'title': u
'Раненный кенгуру забежал в аптеку',
21 u
'uploader': u
'NTDRussian',
22 u
'uploader_id': u
'29790',
25 # It requires ffmpeg (m3u8 download)
26 u
'skip_download': True,
30 def _get_api_response(self
, short_id
, subpath
):
31 api_url
= 'http://rutube.ru/api/play/%s/%s/?format=json' % (subpath
, short_id
)
32 response_json
= self
._download
_webpage
(api_url
, short_id
,
33 u
'Downloading %s json' % subpath
)
34 return json
.loads(response_json
)
36 def _real_extract(self
, url
):
37 mobj
= re
.match(self
._VALID
_URL
, url
)
38 long_id
= mobj
.group('long_id')
39 webpage
= self
._download
_webpage
(url
, long_id
)
40 og_video
= self
._og
_search
_video
_url
(webpage
)
41 short_id
= compat_urlparse
.urlparse(og_video
).path
[1:]
42 options
= self
._get
_api
_response
(short_id
, 'options')
43 trackinfo
= self
._get
_api
_response
(short_id
, 'trackinfo')
44 # Some videos don't have the author field
45 author
= trackinfo
.get('author') or {}
46 m3u8_url
= trackinfo
['video_balancer'].get('m3u8')
48 raise ExtractorError(u
'Couldn\'t find m3u8 manifest url')
51 'id': trackinfo
['id'],
52 'title': trackinfo
['title'],
55 'thumbnail': options
['thumbnail_url'],
56 'uploader': author
.get('name'),
57 'uploader_id': compat_str(author
['id']) if author
else None,