diff options
author | Sergey M․ <dstftw@gmail.com> | 2015-04-20 23:00:37 +0600 |
---|---|---|
committer | Sergey M․ <dstftw@gmail.com> | 2015-04-20 23:00:37 +0600 |
commit | 006ce15a0cfbf79dedd2c59b1e17344b1a130e81 (patch) | |
tree | 74a24d2948fd87e53405ce75e3b2a571a22ba419 /youtube_dl | |
parent | edf421611928e48ac4fda778d6de8ea83585019d (diff) |
[bambuser] Add support for authentication (#5478)
Diffstat (limited to 'youtube_dl')
-rw-r--r-- | youtube_dl/extractor/bambuser.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/youtube_dl/extractor/bambuser.py b/youtube_dl/extractor/bambuser.py index 93913c3f4..8dff1d6e3 100644 --- a/youtube_dl/extractor/bambuser.py +++ b/youtube_dl/extractor/bambuser.py @@ -5,6 +5,7 @@ import itertools from .common import InfoExtractor from ..compat import ( + compat_urllib_parse, compat_urllib_request, compat_str, ) @@ -19,6 +20,8 @@ class BambuserIE(InfoExtractor): IE_NAME = 'bambuser' _VALID_URL = r'https?://bambuser\.com/v/(?P<id>\d+)' _API_KEY = '005f64509e19a868399060af746a00aa' + _LOGIN_URL = 'https://bambuser.com/user' + _NETRC_MACHINE = 'bambuser' _TEST = { 'url': 'http://bambuser.com/v/4050584', @@ -42,6 +45,34 @@ class BambuserIE(InfoExtractor): }, } + def _login(self): + (username, password) = self._get_login_info() + if username is None: + return + + login_form = { + 'form_id': 'user_login', + 'op': 'Log in', + 'name': username, + 'pass': password, + } + + request = compat_urllib_request.Request( + self._LOGIN_URL, compat_urllib_parse.urlencode(login_form).encode('utf-8')) + request.add_header('Referer', self._LOGIN_URL) + response = self._download_webpage( + request, None, 'Logging in as %s' % username) + + login_error = self._html_search_regex( + r'(?s)<div class="messages error">(.+?)</div>', + response, 'login error', default=None) + if login_error: + raise ExtractorError( + 'Unable to login: %s' % login_error, expected=True) + + def _real_initialize(self): + self._login() + def _real_extract(self, url): video_id = self._match_id(url) |