| @@ -7,14 +7,16 @@ import hashlib | |||||||
| from .common import InfoExtractor | from .common import InfoExtractor | ||||||
| from ..utils import ( | from ..utils import ( | ||||||
|     ExtractorError, |     ExtractorError, | ||||||
|  |     compat_urllib_parse, | ||||||
|     compat_urllib_request, |     compat_urllib_request, | ||||||
|     compat_urlparse, |     compat_urlparse, | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| class FC2IE(InfoExtractor): | 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' |     IE_NAME = 'fc2' | ||||||
|  |     _NETRC_MACHINE = 'fc2' | ||||||
|     _TEST = { |     _TEST = { | ||||||
|         'url': 'http://video.fc2.com/en/content/20121103kUan1KHs', |         'url': 'http://video.fc2.com/en/content/20121103kUan1KHs', | ||||||
|         'md5': 'a6ebe8ebe0396518689d963774a54eb7', |         '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): |     def _real_extract(self, url): | ||||||
|         mobj = re.match(self._VALID_URL, url) |         mobj = re.match(self._VALID_URL, url) | ||||||
|         video_id = mobj.group('id') |         video_id = mobj.group('id') | ||||||
|  |  | ||||||
|         webpage = self._download_webpage(url, video_id) |         webpage = self._download_webpage(url, video_id) | ||||||
|         self._downloader.cookiejar.clear_session_cookies()  # must clear |         self._downloader.cookiejar.clear_session_cookies()  # must clear | ||||||
|  |         self._login() | ||||||
|  |  | ||||||
|         title = self._og_search_title(webpage) |         title = self._og_search_title(webpage) | ||||||
|         thumbnail = self._og_search_thumbnail(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() |         mimi = hashlib.md5((video_id + '_gGddgPfeaf_gzyr').encode('utf-8')).hexdigest() | ||||||
|  |  | ||||||
|         info_url = ( |         info_url = ( | ||||||
| @@ -47,7 +85,12 @@ class FC2IE(InfoExtractor): | |||||||
|         info = compat_urlparse.parse_qs(info_webpage) |         info = compat_urlparse.parse_qs(info_webpage) | ||||||
|  |  | ||||||
|         if 'err_code' in info: |         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] |         video_url = info['filepath'][0] + '?mid=' + info['mid'][0] | ||||||
|         title_info = info.get('title') |         title_info = info.get('title') | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 h-collector
					h-collector