X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2Fextractor%2Fvimeo.py;h=a026526b2af88e0dac815d5c051e6f3587f25373;hb=4c76aa06665621c7689938afd7bbdbc797b5c7ea;hp=d10b4ef05ec5a41091481818a168b61f7a6388f7;hpb=73af6e22fda8e2d066e063754a5c9ed707f38150;p=youtube-dl
diff --git a/youtube_dl/extractor/vimeo.py b/youtube_dl/extractor/vimeo.py
index d10b4ef05..a026526b2 100644
--- a/youtube_dl/extractor/vimeo.py
+++ b/youtube_dl/extractor/vimeo.py
@@ -16,6 +16,7 @@ from ..utils import (
ExtractorError,
InAdvancePagedList,
int_or_none,
+ merge_dicts,
NO_DEFAULT,
RegexNotFoundError,
sanitized_Request,
@@ -41,21 +42,30 @@ class VimeoBaseInfoExtractor(InfoExtractor):
if self._LOGIN_REQUIRED:
raise ExtractorError('No login info available, needed for using %s.' % self.IE_NAME, expected=True)
return
- self.report_login()
- webpage = self._download_webpage(self._LOGIN_URL, None, False)
+ webpage = self._download_webpage(
+ self._LOGIN_URL, None, 'Downloading login page')
token, vuid = self._extract_xsrft_and_vuid(webpage)
- data = urlencode_postdata({
+ data = {
'action': 'login',
'email': username,
'password': password,
'service': 'vimeo',
'token': token,
- })
- login_request = sanitized_Request(self._LOGIN_URL, data)
- login_request.add_header('Content-Type', 'application/x-www-form-urlencoded')
- login_request.add_header('Referer', self._LOGIN_URL)
+ }
self._set_vimeo_cookie('vuid', vuid)
- self._download_webpage(login_request, None, False, 'Wrong login info')
+ try:
+ self._download_webpage(
+ self._LOGIN_URL, None, 'Logging in',
+ data=urlencode_postdata(data), headers={
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ 'Referer': self._LOGIN_URL,
+ })
+ except ExtractorError as e:
+ if isinstance(e.cause, compat_HTTPError) and e.cause.code == 418:
+ raise ExtractorError(
+ 'Unable to log in: bad username or password',
+ expected=True)
+ raise ExtractorError('Unable to log in')
def _verify_video_password(self, url, video_id, webpage):
password = self._downloader.params.get('videopassword')
@@ -630,16 +640,18 @@ class VimeoIE(VimeoBaseInfoExtractor):
'preference': 1,
})
- info_dict = self._parse_config(config, video_id)
- formats.extend(info_dict['formats'])
+ info_dict_config = self._parse_config(config, video_id)
+ formats.extend(info_dict_config['formats'])
self._vimeo_sort_formats(formats)
+ json_ld = self._search_json_ld(webpage, video_id, default={})
+
if not cc_license:
cc_license = self._search_regex(
r']+rel=["\']license["\'][^>]+href=(["\'])(?P(?:(?!\1).)+)\1',
webpage, 'license', default=None, group='license')
- info_dict.update({
+ info_dict = {
'id': video_id,
'formats': formats,
'timestamp': unified_timestamp(timestamp),
@@ -649,7 +661,9 @@ class VimeoIE(VimeoBaseInfoExtractor):
'like_count': like_count,
'comment_count': comment_count,
'license': cc_license,
- })
+ }
+
+ info_dict = merge_dicts(info_dict, info_dict_config, json_ld)
return info_dict