mirror of
https://github.com/yt-dlp/yt-dlp
synced 2024-12-26 21:59:08 +01:00
[youtube] Extract SAPISID only once
This commit is contained in:
parent
1bd3639f69
commit
cf87314d4e
1 changed files with 21 additions and 14 deletions
|
@ -536,24 +536,31 @@ class YoutubeBaseInfoExtractor(InfoExtractor):
|
||||||
context['client']['visitorData'] = visitor_data
|
context['client']['visitorData'] = visitor_data
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
_SAPISID = None
|
||||||
|
|
||||||
def _generate_sapisidhash_header(self, origin='https://www.youtube.com'):
|
def _generate_sapisidhash_header(self, origin='https://www.youtube.com'):
|
||||||
|
time_now = round(time.time())
|
||||||
|
if self._SAPISID is None:
|
||||||
|
yt_cookies = self._get_cookies('https://www.youtube.com')
|
||||||
# Sometimes SAPISID cookie isn't present but __Secure-3PAPISID is.
|
# Sometimes SAPISID cookie isn't present but __Secure-3PAPISID is.
|
||||||
# See: https://github.com/yt-dlp/yt-dlp/issues/393
|
# See: https://github.com/yt-dlp/yt-dlp/issues/393
|
||||||
yt_cookies = self._get_cookies('https://www.youtube.com')
|
|
||||||
sapisid_cookie = dict_get(
|
sapisid_cookie = dict_get(
|
||||||
yt_cookies, ('__Secure-3PAPISID', 'SAPISID'))
|
yt_cookies, ('__Secure-3PAPISID', 'SAPISID'))
|
||||||
if sapisid_cookie is None or not sapisid_cookie.value:
|
if sapisid_cookie and sapisid_cookie.value:
|
||||||
return
|
self._SAPISID = sapisid_cookie.value
|
||||||
time_now = round(time.time())
|
self.write_debug('Extracted SAPISID cookie')
|
||||||
# SAPISID cookie is required if not already present
|
# SAPISID cookie is required if not already present
|
||||||
if not yt_cookies.get('SAPISID'):
|
if not yt_cookies.get('SAPISID'):
|
||||||
self.write_debug('Copying __Secure-3PAPISID cookie to SAPISID cookie', only_once=True)
|
self.write_debug('Copying __Secure-3PAPISID cookie to SAPISID cookie')
|
||||||
self._set_cookie(
|
self._set_cookie(
|
||||||
'.youtube.com', 'SAPISID', sapisid_cookie.value, secure=True, expire_time=time_now + 3600)
|
'.youtube.com', 'SAPISID', self._SAPISID, secure=True, expire_time=time_now + 3600)
|
||||||
self.write_debug('Extracted SAPISID cookie', only_once=True)
|
else:
|
||||||
|
self._SAPISID = False
|
||||||
|
if not self._SAPISID:
|
||||||
|
return None
|
||||||
# SAPISIDHASH algorithm from https://stackoverflow.com/a/32065323
|
# SAPISIDHASH algorithm from https://stackoverflow.com/a/32065323
|
||||||
sapisidhash = hashlib.sha1(
|
sapisidhash = hashlib.sha1(
|
||||||
f'{time_now} {sapisid_cookie.value} {origin}'.encode('utf-8')).hexdigest()
|
f'{time_now} {self._SAPISID} {origin}'.encode('utf-8')).hexdigest()
|
||||||
return f'SAPISIDHASH {time_now}_{sapisidhash}'
|
return f'SAPISIDHASH {time_now}_{sapisidhash}'
|
||||||
|
|
||||||
def _call_api(self, ep, query, video_id, fatal=True, headers=None,
|
def _call_api(self, ep, query, video_id, fatal=True, headers=None,
|
||||||
|
|
Loading…
Reference in a new issue