diff options
| author | h-collector <githcoll@gmail.com> | 2014-07-06 01:42:41 +0200 | 
|---|---|---|
| committer | h-collector <githcoll@gmail.com> | 2014-10-20 18:53:53 +0200 | 
| commit | 4231235cdaa18d050f3119a80ac409138fb8e8bd (patch) | |
| tree | fb85184339ddc88814092758f1dc8fd9be2cb0fc | |
| parent | d24a2b20b4908b01f9b5bfa88cd293c189fe6475 (diff) | |
Fix issues with fc2
Fix issues #2912 and #3171
| -rw-r--r-- | youtube_dl/extractor/fc2.py | 49 | 
1 files changed, 46 insertions, 3 deletions
| diff --git a/youtube_dl/extractor/fc2.py b/youtube_dl/extractor/fc2.py index c663a0f81..ecfb233f9 100644 --- a/youtube_dl/extractor/fc2.py +++ b/youtube_dl/extractor/fc2.py @@ -7,14 +7,16 @@ import hashlib  from .common import InfoExtractor  from ..utils import (      ExtractorError, +    compat_urllib_parse,      compat_urllib_request,      compat_urlparse,  )  class FC2IE(InfoExtractor): -    _VALID_URL = r'^http://video\.fc2\.com/((?P<lang>[^/]+)/)?content/(?P<id>[^/]+)' +    _VALID_URL = r'^http://video\.fc2\.com/((?P<lang>[^/]+)/)?(a/)?content/(?P<id>[^/]+)'      IE_NAME = 'fc2' +    _NETRC_MACHINE = 'fc2'      _TEST = {          'url': 'http://video.fc2.com/en/content/20121103kUan1KHs',          'md5': 'a6ebe8ebe0396518689d963774a54eb7', @@ -25,17 +27,53 @@ class FC2IE(InfoExtractor):          },      } +    #def _real_initialize(self): +    #    self._login() + +    def _login(self): +        (username, password) = self._get_login_info() +        if (username is None) or (password is None): +           self._downloader.report_warning('unable to log in: will be downloading in non authorized mode') +           return False + +        # Log in +        login_form_strs = { +            'email':    username, +            'password': password, +            'done':     'video', +            'Submit':   ' Login ', +        } + +        # Convert to UTF-8 *before* urlencode because Python 2.x's urlencode +        # chokes on unicode +        login_form = dict((k.encode('utf-8'), v.encode('utf-8')) for k, v in login_form_strs.items()) +        login_data = compat_urllib_parse.urlencode(login_form).encode('utf-8') +        request    = compat_urllib_request.Request( +            'https://secure.id.fc2.com/index.php?mode=login&switch_language=en', login_data) + +        login_results = self._download_webpage(request, None, note='Logging in', errnote='Unable to log in') +        if 'mode=redirect&login=done' not in login_results: +            self._downloader.report_warning('unable to log in: bad username or password') +            return False +         +        # this is also needed +        login_redir = compat_urllib_request.Request('http://id.fc2.com/?mode=redirect&login=done') +        redir_res   = self._download_webpage(login_redir, None, note='Login redirect', errnote='Something is not right') + +        return True +      def _real_extract(self, url):          mobj = re.match(self._VALID_URL, url)          video_id = mobj.group('id')          webpage = self._download_webpage(url, video_id)          self._downloader.cookiejar.clear_session_cookies()  # must clear +        self._login()          title = self._og_search_title(webpage)          thumbnail = self._og_search_thumbnail(webpage) -        refer = url.replace('/content/', '/a/content/') +        refer = (url if '/a/content/' in url else url.replace('/content/', '/a/content/'));          mimi = hashlib.md5((video_id + '_gGddgPfeaf_gzyr').encode('utf-8')).hexdigest()          info_url = ( @@ -47,7 +85,12 @@ class FC2IE(InfoExtractor):          info = compat_urlparse.parse_qs(info_webpage)          if 'err_code' in info: -            raise ExtractorError('Error code: %s' % info['err_code'][0]) +            #raise ExtractorError('Error code: %s' % info['err_code'][0]) +            # most of the time we can still download wideo even if err_code is 403 or 602 +            print 'Error code was: %s... but still trying' % info['err_code'][0] +             +        if 'filepath' not in info: +            raise ExtractorError('No file path for download. Maybe not logged?')          video_url = info['filepath'][0] + '?mid=' + info['mid'][0]          title_info = info.get('title') | 
