diff options
| author | Sergey M․ <dstftw@gmail.com> | 2015-06-19 21:57:31 +0600 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2015-06-19 21:57:31 +0600 | 
| commit | cbcd1a5474dd8b39e68b0d2bbc493701c655a2d9 (patch) | |
| tree | ec48129eb58cd6dbb3beeeb0fb9b59aed8ceffc2 | |
| parent | c9bebed294dd29d9188265c8f7bfb0e1b43406ff (diff) | |
[dramafever] Add support for authentication (Closes #6017)
| -rw-r--r-- | youtube_dl/extractor/dramafever.py | 38 | 
1 files changed, 36 insertions, 2 deletions
| diff --git a/youtube_dl/extractor/dramafever.py b/youtube_dl/extractor/dramafever.py index a34aad486..cfbcddcef 100644 --- a/youtube_dl/extractor/dramafever.py +++ b/youtube_dl/extractor/dramafever.py @@ -6,6 +6,8 @@ import itertools  from .common import InfoExtractor  from ..compat import (      compat_HTTPError, +    compat_urllib_parse, +    compat_urllib_request,      compat_urlparse,  )  from ..utils import ( @@ -17,7 +19,39 @@ from ..utils import (  ) -class DramaFeverIE(InfoExtractor): +class DramaFeverBaseIE(InfoExtractor): +    _LOGIN_URL = 'https://www.dramafever.com/accounts/login/' +    _NETRC_MACHINE = 'dramafever' + +    def _real_initialize(self): +        self._login() + +    def _login(self): +        (username, password) = self._get_login_info() +        if username is None: +            return + +        login_form = { +            'username': username, +            'password': password, +        } + +        request = compat_urllib_request.Request( +            self._LOGIN_URL, compat_urllib_parse.urlencode(login_form).encode('utf-8')) +        response = self._download_webpage( +            request, None, 'Logging in as %s' % username) + +        if all(logout_pattern not in response +               for logout_pattern in ['href="/accounts/logout/"', '>Log out<']): +            error = self._html_search_regex( +                r'(?s)class="hidden-xs prompt"[^>]*>(.+?)<', +                response, 'error message', default=None) +            if error: +                raise ExtractorError('Unable to login: %s' % error, expected=True) +            raise ExtractorError('Unable to log in') + + +class DramaFeverIE(DramaFeverBaseIE):      IE_NAME = 'dramafever'      _VALID_URL = r'https?://(?:www\.)?dramafever\.com/drama/(?P<id>[0-9]+/[0-9]+)(?:/|$)'      _TEST = { @@ -97,7 +131,7 @@ class DramaFeverIE(InfoExtractor):          } -class DramaFeverSeriesIE(InfoExtractor): +class DramaFeverSeriesIE(DramaFeverBaseIE):      IE_NAME = 'dramafever:series'      _VALID_URL = r'https?://(?:www\.)?dramafever\.com/drama/(?P<id>[0-9]+)(?:/(?:(?!\d+(?:/|$)).+)?)?$'      _TESTS = [{ | 
