projects
/
youtube-dl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'subtitles-rework'
[youtube-dl]
/
youtube_dl
/
extractor
/
vimeo.py
diff --git
a/youtube_dl/extractor/vimeo.py
b/youtube_dl/extractor/vimeo.py
index 5930d598415a7bb4cd944d58a0831aa1e2bfd27d..8f540f5780570d06fa10e695555026c537b7c0f0 100644
(file)
--- a/
youtube_dl/extractor/vimeo.py
+++ b/
youtube_dl/extractor/vimeo.py
@@
-4,6
+4,7
@@
from __future__ import unicode_literals
import json
import re
import itertools
import json
import re
import itertools
+import hashlib
from .common import InfoExtractor
from ..compat import (
from .common import InfoExtractor
from ..compat import (
@@
-17,6
+18,7
@@
from ..utils import (
InAdvancePagedList,
int_or_none,
RegexNotFoundError,
InAdvancePagedList,
int_or_none,
RegexNotFoundError,
+ smuggle_url,
std_headers,
unsmuggle_url,
urlencode_postdata,
std_headers,
unsmuggle_url,
urlencode_postdata,
@@
-173,7
+175,7
@@
class VimeoIE(VimeoBaseInfoExtractor):
def _verify_video_password(self, url, video_id, webpage):
password = self._downloader.params.get('videopassword', None)
if password is None:
def _verify_video_password(self, url, video_id, webpage):
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')
+ raise ExtractorError('This video is protected by a password, use the --video-password option'
, expected=True
)
token = self._search_regex(r'xsrft: \'(.*?)\'', webpage, 'login token')
data = compat_urllib_parse.urlencode({
'password': password,
token = self._search_regex(r'xsrft: \'(.*?)\'', webpage, 'login token')
data = compat_urllib_parse.urlencode({
'password': password,
@@
-223,6
+225,11
@@
class VimeoIE(VimeoBaseInfoExtractor):
if mobj.group('pro') or mobj.group('player'):
url = 'http://player.vimeo.com/video/' + video_id
if mobj.group('pro') or mobj.group('player'):
url = 'http://player.vimeo.com/video/' + video_id
+ password = self._downloader.params.get('videopassword', None)
+ if password:
+ headers['Cookie'] = '%s_password=%s' % (
+ video_id, hashlib.md5(password.encode('utf-8')).hexdigest())
+
# Retrieve video webpage to extract further information
request = compat_urllib_request.Request(url, None, headers)
try:
# Retrieve video webpage to extract further information
request = compat_urllib_request.Request(url, None, headers)
try:
@@
-266,8
+273,11
@@
class VimeoIE(VimeoBaseInfoExtractor):
raise ExtractorError('The author has restricted the access to this video, try with the "--referer" option')
if re.search(r'<form[^>]+?id="pw_form"', webpage) is not None:
raise ExtractorError('The author has restricted the access to this video, try with the "--referer" option')
if re.search(r'<form[^>]+?id="pw_form"', webpage) is not None:
+ if data and '_video_password_verified' in data:
+ raise ExtractorError('video password verification failed!')
self._verify_video_password(url, video_id, webpage)
self._verify_video_password(url, video_id, webpage)
- return self._real_extract(url)
+ return self._real_extract(
+ smuggle_url(url, {'_video_password_verified': 'verified'}))
else:
raise ExtractorError('Unable to extract info section',
cause=e)
else:
raise ExtractorError('Unable to extract info section',
cause=e)
@@
-398,6
+408,7
@@
class VimeoChannelIE(InfoExtractor):
_TESTS = [{
'url': 'http://vimeo.com/channels/tributes',
'info_dict': {
_TESTS = [{
'url': 'http://vimeo.com/channels/tributes',
'info_dict': {
+ 'id': 'tributes',
'title': 'Vimeo Tributes',
},
'playlist_mincount': 25,
'title': 'Vimeo Tributes',
},
'playlist_mincount': 25,
@@
-476,6
+487,7
@@
class VimeoUserIE(VimeoChannelIE):
'url': 'http://vimeo.com/nkistudio/videos',
'info_dict': {
'title': 'Nki',
'url': 'http://vimeo.com/nkistudio/videos',
'info_dict': {
'title': 'Nki',
+ 'id': 'nkistudio',
},
'playlist_mincount': 66,
}]
},
'playlist_mincount': 66,
}]
@@
-493,6
+505,7
@@
class VimeoAlbumIE(VimeoChannelIE):
_TESTS = [{
'url': 'http://vimeo.com/album/2632481',
'info_dict': {
_TESTS = [{
'url': 'http://vimeo.com/album/2632481',
'info_dict': {
+ 'id': '2632481',
'title': 'Staff Favorites: November 2013',
},
'playlist_mincount': 13,
'title': 'Staff Favorites: November 2013',
},
'playlist_mincount': 13,
@@
-523,6
+536,7
@@
class VimeoGroupsIE(VimeoAlbumIE):
_TESTS = [{
'url': 'http://vimeo.com/groups/rolexawards',
'info_dict': {
_TESTS = [{
'url': 'http://vimeo.com/groups/rolexawards',
'info_dict': {
+ 'id': 'rolexawards',
'title': 'Rolex Awards for Enterprise',
},
'playlist_mincount': 73,
'title': 'Rolex Awards for Enterprise',
},
'playlist_mincount': 73,
@@
-605,6
+619,7
@@
class VimeoLikesIE(InfoExtractor):
'url': 'https://vimeo.com/user755559/likes/',
'playlist_mincount': 293,
"info_dict": {
'url': 'https://vimeo.com/user755559/likes/',
'playlist_mincount': 293,
"info_dict": {
+ 'id': 'user755559_likes',
"description": "See all the videos urza likes",
"title": 'Videos urza likes',
},
"description": "See all the videos urza likes",
"title": 'Videos urza likes',
},