Merge remote-tracking branch 'h-collector/master'
authorPhilipp Hagemeister <phihag@phihag.de>
Sun, 25 Jan 2015 02:37:51 +0000 (03:37 +0100)
committerPhilipp Hagemeister <phihag@phihag.de>
Sun, 25 Jan 2015 02:48:26 +0000 (03:48 +0100)
Conflicts:
youtube_dl/extractor/fc2.py

1  2 
youtube_dl/extractor/fc2.py

index 81ceace53289709b93d7c647f6627197320381ef,3073ab0d4ae723a568ea38f9c4fd2e9210a086e7..1ccc1a9642bb09ed84bdd2747c665520ab3c98c4
@@@ -4,7 -4,10 +4,8 @@@ from __future__ import unicode_literal
  import hashlib
  
  from .common import InfoExtractor
 -from ..utils import (
 -    ExtractorError,
 +from ..compat import (
+     compat_urllib_parse,
      compat_urllib_request,
      compat_urlparse,
  )
@@@ -14,9 -14,10 +15,10 @@@ from ..utils import 
  
  
  class FC2IE(InfoExtractor):
 -    _VALID_URL = r'^http://video\.fc2\.com/((?P<lang>[^/]+)/)?(a/)?content/(?P<id>[^/]+)'
 +    _VALID_URL = r'^http://video\.fc2\.com/(?:[^/]+/)?content/(?P<id>[^/]+)'
      IE_NAME = 'fc2'
-     _TEST = {
+     _NETRC_MACHINE = 'fc2'
 -    _TEST = {
++    _TESTS = [{
          'url': 'http://video.fc2.com/en/content/20121103kUan1KHs',
          'md5': 'a6ebe8ebe0396518689d963774a54eb7',
          'info_dict': {
              'ext': 'flv',
              'title': 'Boxing again with Puff',
          },
--    }
 -
 -    #def _real_initialize(self):
 -    #    self._login()
++    }, {
++        'url': 'http://video.fc2.com/en/content/20150125cEva0hDn/',
++        'info_dict': {
++            'id': '20150125cEva0hDn',
++            'ext': 'mp4',
++        },
++        'params': {
++            'username': 'ytdl@yt-dl.org',
++            'password': '(snip)',
++            'skip': 'requires actual password'
++        }
++    }]
+     def _login(self):
+         (username, password) = self._get_login_info()
 -        if (username is None) or (password is None):
 -           self.to_screen('unable to log in: will be downloading in non authorized mode') # report_warning
 -           return False
++        if username is None or password is None:
++            return False
+         # Log in
+         login_form_strs = {
 -            'email':    username,
++            'email': username,
+             'password': password,
 -            'done':     'video',
 -            'Submit':   ' Login ',
++            '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(
++        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.to_screen('unable to log in: bad username or password') # report_warning
++            self.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')
++        self._download_webpage(
++            login_redir, None, note='Login redirect', errnote='Login redirect failed')
+         return True
  
      def _real_extract(self, url):
 -        mobj = re.match(self._VALID_URL, url)
 -        video_id = mobj.group('id')
 -
 +        video_id = self._match_id(url)
++        self._login()
          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)
          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
 -            self.to_screen('Error code was: %s... but still trying' % info['err_code'][0]) # report_warning
++            self.report_warning(
++                'Error code was: %s... but still trying' % info['err_code'][0])
+         if 'filepath' not in info:
 -            raise ExtractorError('Cannot download file. Are you logged?')
++            raise ExtractorError('Cannot download file. Are you logged in?')
  
          video_url = info['filepath'][0] + '?mid=' + info['mid'][0]
          title_info = info.get('title')