|
|
@ -29,7 +29,7 @@ class VimeoBaseInfoExtractor(InfoExtractor): |
|
|
|
(username, password) = self._get_login_info() |
|
|
|
if username is None: |
|
|
|
if self._LOGIN_REQUIRED: |
|
|
|
raise ExtractorError(u'No login info available, needed for using %s.' % self.IE_NAME, expected=True) |
|
|
|
raise ExtractorError('No login info available, needed for using %s.' % self.IE_NAME, expected=True) |
|
|
|
return |
|
|
|
self.report_login() |
|
|
|
login_url = 'https://vimeo.com/log_in' |
|
|
@ -78,10 +78,11 @@ class VimeoIE(VimeoBaseInfoExtractor, SubtitlesInfoExtractor): |
|
|
|
}, |
|
|
|
{ |
|
|
|
'url': 'http://vimeopro.com/openstreetmapus/state-of-the-map-us-2013/video/68093876', |
|
|
|
'file': '68093876.mp4', |
|
|
|
'md5': '3b5ca6aa22b60dfeeadf50b72e44ed82', |
|
|
|
'note': 'Vimeo Pro video (#1197)', |
|
|
|
'info_dict': { |
|
|
|
'id': '68093876', |
|
|
|
'ext': 'mp4', |
|
|
|
'uploader_id': 'openstreetmapus', |
|
|
|
'uploader': 'OpenStreetMap US', |
|
|
|
'title': 'Andy Allan - Putting the Carto into OpenStreetMap Cartography', |
|
|
@ -89,10 +90,11 @@ class VimeoIE(VimeoBaseInfoExtractor, SubtitlesInfoExtractor): |
|
|
|
}, |
|
|
|
{ |
|
|
|
'url': 'http://player.vimeo.com/video/54469442', |
|
|
|
'file': '54469442.mp4', |
|
|
|
'md5': '619b811a4417aa4abe78dc653becf511', |
|
|
|
'note': 'Videos that embed the url in the player page', |
|
|
|
'info_dict': { |
|
|
|
'id': '54469442', |
|
|
|
'ext': 'mp4', |
|
|
|
'title': 'Kathy Sierra: Building the minimum Badass User, Business of Software', |
|
|
|
'uploader': 'The BLN & Business of Software', |
|
|
|
'uploader_id': 'theblnbusinessofsoftware', |
|
|
@ -100,10 +102,11 @@ class VimeoIE(VimeoBaseInfoExtractor, SubtitlesInfoExtractor): |
|
|
|
}, |
|
|
|
{ |
|
|
|
'url': 'http://vimeo.com/68375962', |
|
|
|
'file': '68375962.mp4', |
|
|
|
'md5': 'aaf896bdb7ddd6476df50007a0ac0ae7', |
|
|
|
'note': 'Video protected with password', |
|
|
|
'info_dict': { |
|
|
|
'id': '68375962', |
|
|
|
'ext': 'mp4', |
|
|
|
'title': 'youtube-dl password protected test video', |
|
|
|
'upload_date': '20130614', |
|
|
|
'uploader_id': 'user18948128', |
|
|
@ -143,14 +146,16 @@ class VimeoIE(VimeoBaseInfoExtractor, SubtitlesInfoExtractor): |
|
|
|
if password is None: |
|
|
|
raise ExtractorError('This video is protected by a password, use the --video-password option') |
|
|
|
token = self._search_regex(r'xsrft: \'(.*?)\'', webpage, 'login token') |
|
|
|
data = compat_urllib_parse.urlencode({'password': password, |
|
|
|
'token': token}) |
|
|
|
data = compat_urllib_parse.urlencode({ |
|
|
|
'password': password, |
|
|
|
'token': token, |
|
|
|
}) |
|
|
|
# I didn't manage to use the password with https |
|
|
|
if url.startswith('https'): |
|
|
|
pass_url = url.replace('https','http') |
|
|
|
pass_url = url.replace('https', 'http') |
|
|
|
else: |
|
|
|
pass_url = url |
|
|
|
password_request = compat_urllib_request.Request(pass_url+'/password', data) |
|
|
|
password_request = compat_urllib_request.Request(pass_url + '/password', data) |
|
|
|
password_request.add_header('Content-Type', 'application/x-www-form-urlencoded') |
|
|
|
password_request.add_header('Cookie', 'xsrft=%s' % token) |
|
|
|
self._download_webpage(password_request, video_id, |
|
|
@ -305,7 +310,7 @@ class VimeoIE(VimeoBaseInfoExtractor, SubtitlesInfoExtractor): |
|
|
|
file_info = {} |
|
|
|
if video_url is None: |
|
|
|
video_url = "http://player.vimeo.com/play_redirect?clip_id=%s&sig=%s&time=%s&quality=%s&codecs=%s&type=moogaloop_local&embed_location=" \ |
|
|
|
%(video_id, sig, timestamp, quality, codec_name.upper()) |
|
|
|
% (video_id, sig, timestamp, quality, codec_name.upper()) |
|
|
|
|
|
|
|
files[key].append({ |
|
|
|
'ext': codec_extension, |
|
|
@ -364,7 +369,7 @@ class VimeoChannelIE(InfoExtractor): |
|
|
|
video_ids = [] |
|
|
|
for pagenum in itertools.count(1): |
|
|
|
webpage = self._download_webpage( |
|
|
|
self._page_url(base_url, pagenum) ,list_id, |
|
|
|
self._page_url(base_url, pagenum), list_id, |
|
|
|
'Downloading page %s' % pagenum) |
|
|
|
video_ids.extend(re.findall(r'id="clip_(\d+?)"', webpage)) |
|
|
|
if re.search(self._MORE_PAGES_INDICATOR, webpage, re.DOTALL) is None: |
|
|
@ -380,7 +385,7 @@ class VimeoChannelIE(InfoExtractor): |
|
|
|
|
|
|
|
def _real_extract(self, url): |
|
|
|
mobj = re.match(self._VALID_URL, url) |
|
|
|
channel_id = mobj.group('id') |
|
|
|
channel_id = mobj.group('id') |
|
|
|
return self._extract_videos(channel_id, 'http://vimeo.com/channels/%s' % channel_id) |
|
|
|
|
|
|
|
|
|
|
|