X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2Fextractor%2Fvimeo.py;h=a50170ce76923837717dec6df19a558734d46e4e;hb=96d7b8873ad47c1f52193e84fc6f8cfe12891aa7;hp=54b550b0c61d54fd6a34eeb92aa99dd9cf7c8755;hpb=9148eb002beecaadb69394bc4a779ee1c328142b;p=youtube-dl diff --git a/youtube_dl/extractor/vimeo.py b/youtube_dl/extractor/vimeo.py index 54b550b0c..a50170ce7 100644 --- a/youtube_dl/extractor/vimeo.py +++ b/youtube_dl/extractor/vimeo.py @@ -24,7 +24,7 @@ class VimeoIE(InfoExtractor): # _VALID_URL matches Vimeo URLs _VALID_URL = r'''(?x) - (?Phttps?://)? + (?P(?:https?:)?//)? (?:(?:www|(?Pplayer))\.)? vimeo(?Ppro)?\.com/ (?:.*?/)? @@ -93,7 +93,7 @@ class VimeoIE(InfoExtractor): self.report_login() login_url = 'https://vimeo.com/log_in' webpage = self._download_webpage(login_url, None, False) - token = re.search(r'xsrft: \'(.*?)\'', webpage).group(1) + token = self._search_regex(r'xsrft: \'(.*?)\'', webpage, 'login token') data = compat_urllib_parse.urlencode({'email': username, 'password': password, 'action': 'login', @@ -109,7 +109,7 @@ class VimeoIE(InfoExtractor): password = self._downloader.params.get('videopassword', None) if password is None: raise ExtractorError('This video is protected by a password, use the --video-password option') - token = re.search(r'xsrft: \'(.*?)\'', webpage).group(1) + token = self._search_regex(r'xsrft: \'(.*?)\'', webpage, 'login token') data = compat_urllib_parse.urlencode({'password': password, 'token': token}) # I didn't manage to use the password with https @@ -124,6 +124,19 @@ class VimeoIE(InfoExtractor): 'Verifying the password', 'Wrong password') + def _verify_player_video_password(self, url, video_id): + password = self._downloader.params.get('videopassword', None) + if password is None: + raise ExtractorError('This video is protected by a password, use the --video-password option') + data = compat_urllib_parse.urlencode({'password': password}) + pass_url = url + '/check-password' + password_request = compat_urllib_request.Request(pass_url, data) + password_request.add_header('Content-Type', 'application/x-www-form-urlencoded') + return self._download_json( + password_request, video_id, + 'Verifying the password', + 'Wrong password') + def _real_initialize(self): self._login() @@ -136,9 +149,6 @@ class VimeoIE(InfoExtractor): # Extract ID from URL mobj = re.match(self._VALID_URL, url) - if mobj is None: - raise ExtractorError('Invalid URL: %s' % url) - video_id = mobj.group('id') if mobj.group('pro') or mobj.group('player'): url = 'http://player.vimeo.com/video/' + video_id @@ -184,8 +194,7 @@ class VimeoIE(InfoExtractor): cause=e) else: if config.get('view') == 4: - self._verify_video_password(url, video_id, webpage) - return self._real_extract(url) + config = self._verify_player_video_password(url, video_id) # Extract title video_title = config["video"]["title"] @@ -282,7 +291,7 @@ class VimeoIE(InfoExtractor): class VimeoChannelIE(InfoExtractor): IE_NAME = 'vimeo:channel' - _VALID_URL = r'(?:https?://)?vimeo.\com/channels/(?P[^/]+)' + _VALID_URL = r'(?:https?://)?vimeo\.com/channels/(?P[^/]+)' _MORE_PAGES_INDICATOR = r']+?title="(.*?)"' @@ -318,7 +327,7 @@ class VimeoChannelIE(InfoExtractor): class VimeoUserIE(VimeoChannelIE): IE_NAME = 'vimeo:user' - _VALID_URL = r'(?:https?://)?vimeo.\com/(?P[^/]+)(?:[#?]|$)' + _VALID_URL = r'(?:https?://)?vimeo\.com/(?P[^/]+)(?:/videos|[#?]|$)' _TITLE_RE = r']+?class="user">([^<>]+?)' @classmethod @@ -335,7 +344,7 @@ class VimeoUserIE(VimeoChannelIE): class VimeoAlbumIE(VimeoChannelIE): IE_NAME = 'vimeo:album' - _VALID_URL = r'(?:https?://)?vimeo.\com/album/(?P\d+)' + _VALID_URL = r'(?:https?://)?vimeo\.com/album/(?P\d+)' _TITLE_RE = r'