Compare commits

...

2 Commits

Author SHA1 Message Date
bashonly
20be1c0fff
Apply suggestions from code review 2025-04-27 04:45:20 +00:00
doe1080
83464efdd7 Apply suggestions 2025-04-27 07:54:53 +09:00

View File

@ -41,18 +41,22 @@ class NiconicoBaseIE(InfoExtractor):
_LOGIN_BASE = 'https://account.nicovideo.jp'
_NETRC_MACHINE = 'niconico'
def raise_login_error(self, error, default, expected=True):
@property
def is_logged_in(self):
return bool(self._get_cookies('https://www.nicovideo.jp').get('user_session'))
def _raise_login_error(self, error, default, expected=True):
raise ExtractorError(f'Unable to login: {error or default}', expected=expected)
def _perform_login(self, username, password):
if self._get_cookies('https://www.nicovideo.jp').get('user_session'):
if self.is_logged_in:
return
self._request_webpage(
f'{self._LOGIN_BASE}/login', None, 'Requesting session cookies')
webpage = self._download_webpage(
f'{self._LOGIN_BASE}/login/redirector', None,
'Logging in', headers={
'Logging in', 'Unable to log in', headers={
'Content-Type': 'application/x-www-form-urlencoded',
'Referer': f'{self._LOGIN_BASE}/login',
}, data=urlencode_postdata({
@ -60,17 +64,13 @@ class NiconicoBaseIE(InfoExtractor):
'password': password,
}),
)
if traverse_obj(self._search_json(
r'NicoGoogleTagManagerDataLayer\s*=\s*\[',
webpage, 'data layer', None, fatal=False,
), ('user', 'login_status', {lambda x: x == 'login'})):
if self.is_logged_in:
return
if err_msg := traverse_obj(webpage, (
{find_element(cls='notice error')}, {find_element(cls='notice__text')}, {clean_html},
)):
self.raise_login_error(err_msg, 'Invalid username or password')
self._raise_login_error(err_msg, 'Invalid username or password')
elif 'oneTimePw' in webpage:
post_url = self._search_regex(
r'<form[^>]+action=(["\'])(?P<url>.+?)\1', webpage, 'post url', group='url')
@ -84,15 +84,14 @@ class NiconicoBaseIE(InfoExtractor):
)
if 'error-code' in parse_qs(urlh.url):
err_msg = traverse_obj(self._download_webpage(urlh.url, None), (
{find_element(cls='pageMainMsg')}, {clean_html}))
self.raise_login_error(err_msg, 'MFA session expired')
err_msg = traverse_obj(mfa, ({find_element(cls='pageMainMsg')}, {clean_html}))
self._raise_login_error(err_msg, 'MFA session expired')
if 'formError' in mfa:
err_msg = traverse_obj(mfa, (
{find_element(cls='formError')}, {find_element(tag='div')}, {clean_html}))
self.raise_login_error(err_msg, 'MFA challenge failed')
self._raise_login_error(err_msg, 'MFA challenge failed')
else:
self.raise_login_error(None, 'Unexpected login error', expected=False)
self._raise_login_error(None, 'Unexpected login error', expected=False)
class NiconicoIE(NiconicoBaseIE):