Skip to content

Commit

Permalink
[extractor/AbemaTV] Cache user token whenever appropriate (#6216)
Browse files Browse the repository at this point in the history
Authored by: Lesmiscore
  • Loading branch information
Lesmiscore committed Feb 12, 2023
1 parent b6795fd commit a4f1683
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion yt_dlp/extractor/abematv.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ class AbemaTVBaseIE(InfoExtractor):
def _generate_aks(cls, deviceid):
deviceid = deviceid.encode('utf-8')
# add 1 hour and then drop minute and secs
ts_1hour = int((time_seconds(hours=9) // 3600 + 1) * 3600)
ts_1hour = int((time_seconds() // 3600 + 1) * 3600)
time_struct = time.gmtime(ts_1hour)
ts_1hour_str = str(ts_1hour).encode('utf-8')

Expand Down Expand Up @@ -190,6 +190,16 @@ def _get_device_token(self):
if self._USERTOKEN:
return self._USERTOKEN

username, _ = self._get_login_info()
AbemaTVBaseIE._USERTOKEN = username and self.cache.load(self._NETRC_MACHINE, username)
if AbemaTVBaseIE._USERTOKEN:
# try authentication with locally stored token
try:
self._get_media_token(True)
return
except ExtractorError as e:
self.report_warning(f'Failed to login with cached user token; obtaining a fresh one ({e})')

AbemaTVBaseIE._DEVICE_ID = str(uuid.uuid4())
aks = self._generate_aks(self._DEVICE_ID)
user_data = self._download_json(
Expand Down Expand Up @@ -300,6 +310,11 @@ class AbemaTVIE(AbemaTVBaseIE):
_TIMETABLE = None

def _perform_login(self, username, password):
self._get_device_token()
if self.cache.load(self._NETRC_MACHINE, username) and self._get_media_token():
self.write_debug('Skipping logging in')
return

if '@' in username: # don't strictly check if it's email address or not
ep, method = 'user/email', 'email'
else:
Expand All @@ -319,6 +334,7 @@ def _perform_login(self, username, password):

AbemaTVBaseIE._USERTOKEN = login_response['token']
self._get_media_token(True)
self.cache.store(self._NETRC_MACHINE, username, AbemaTVBaseIE._USERTOKEN)

def _real_extract(self, url):
# starting download using infojson from this extractor is undefined behavior,
Expand Down

0 comments on commit a4f1683

Please sign in to comment.