mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-20 05:47:24 +01:00
Keep some of the OAuth cleanup/abstractions
Authored by: bashonly
This commit is contained in:
parent
265c443883
commit
ac987127ae
@ -573,9 +573,15 @@ def _real_initialize(self):
|
|||||||
self._initialize_consent()
|
self._initialize_consent()
|
||||||
self._check_login_required()
|
self._check_login_required()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _youtube_login_hint(self):
|
||||||
|
return (f'{self._login_hint(method="cookies")}. '
|
||||||
|
'See https://github.com/yt-dlp/yt-dlp/wiki/Extractors#exporting-youtube-cookies for help with cookies')
|
||||||
|
|
||||||
def _check_login_required(self):
|
def _check_login_required(self):
|
||||||
if self._LOGIN_REQUIRED and not self._cookies_passed:
|
if self._LOGIN_REQUIRED and not self.is_authenticated:
|
||||||
self.raise_login_required('Login details are needed to download this content', method='cookies')
|
self.raise_login_required(
|
||||||
|
f'Login details are needed to download this content. {self._youtube_login_hint}', method=None)
|
||||||
|
|
||||||
_YT_INITIAL_DATA_RE = r'(?:window\s*\[\s*["\']ytInitialData["\']\s*\]|ytInitialData)\s*='
|
_YT_INITIAL_DATA_RE = r'(?:window\s*\[\s*["\']ytInitialData["\']\s*\]|ytInitialData)\s*='
|
||||||
_YT_INITIAL_PLAYER_RESPONSE_RE = r'ytInitialPlayerResponse\s*='
|
_YT_INITIAL_PLAYER_RESPONSE_RE = r'ytInitialPlayerResponse\s*='
|
||||||
@ -674,17 +680,6 @@ def _extract_session_index(*data):
|
|||||||
if session_index is not None:
|
if session_index is not None:
|
||||||
return session_index
|
return session_index
|
||||||
|
|
||||||
# Deprecated?
|
|
||||||
def _extract_identity_token(self, ytcfg=None, webpage=None):
|
|
||||||
if ytcfg:
|
|
||||||
token = try_get(ytcfg, lambda x: x['ID_TOKEN'], str)
|
|
||||||
if token:
|
|
||||||
return token
|
|
||||||
if webpage:
|
|
||||||
return self._search_regex(
|
|
||||||
r'\bID_TOKEN["\']\s*:\s*["\'](.+?)["\']', webpage,
|
|
||||||
'identity token', default=None, fatal=False)
|
|
||||||
|
|
||||||
def _data_sync_id_to_delegated_session_id(self, data_sync_id):
|
def _data_sync_id_to_delegated_session_id(self, data_sync_id):
|
||||||
if not data_sync_id:
|
if not data_sync_id:
|
||||||
return
|
return
|
||||||
@ -741,21 +736,11 @@ def extract_ytcfg(self, video_id, webpage):
|
|||||||
r'ytcfg\.set\s*\(\s*({.+?})\s*\)\s*;', webpage, 'ytcfg',
|
r'ytcfg\.set\s*\(\s*({.+?})\s*\)\s*;', webpage, 'ytcfg',
|
||||||
default='{}'), video_id, fatal=False) or {}
|
default='{}'), video_id, fatal=False) or {}
|
||||||
|
|
||||||
def generate_api_headers(
|
def _generate_cookie_auth_headers(self, *, ytcfg=None, account_syncid=None, session_index=None, origin=None, **kwargs):
|
||||||
self, *, ytcfg=None, account_syncid=None, session_index=None,
|
headers = {}
|
||||||
visitor_data=None, identity_token=None, api_hostname=None, default_client='web'):
|
account_syncid = account_syncid or self._extract_account_syncid(ytcfg)
|
||||||
|
if account_syncid:
|
||||||
origin = 'https://' + (self._select_api_hostname(api_hostname, default_client))
|
headers['X-Goog-PageId'] = account_syncid
|
||||||
headers = {
|
|
||||||
'X-YouTube-Client-Name': str(
|
|
||||||
self._ytcfg_get_safe(ytcfg, lambda x: x['INNERTUBE_CONTEXT_CLIENT_NAME'], default_client=default_client)),
|
|
||||||
'X-YouTube-Client-Version': self._extract_client_version(ytcfg, default_client),
|
|
||||||
'Origin': origin,
|
|
||||||
'X-Youtube-Identity-Token': identity_token or self._extract_identity_token(ytcfg),
|
|
||||||
'X-Goog-PageId': account_syncid or self._extract_account_syncid(ytcfg),
|
|
||||||
'X-Goog-Visitor-Id': visitor_data or self._extract_visitor_data(ytcfg),
|
|
||||||
'User-Agent': self._ytcfg_get_safe(ytcfg, lambda x: x['INNERTUBE_CONTEXT']['client']['userAgent'], default_client=default_client),
|
|
||||||
}
|
|
||||||
if session_index is None:
|
if session_index is None:
|
||||||
session_index = self._extract_session_index(ytcfg)
|
session_index = self._extract_session_index(ytcfg)
|
||||||
if account_syncid or session_index is not None:
|
if account_syncid or session_index is not None:
|
||||||
@ -765,6 +750,23 @@ def generate_api_headers(
|
|||||||
if auth is not None:
|
if auth is not None:
|
||||||
headers['Authorization'] = auth
|
headers['Authorization'] = auth
|
||||||
headers['X-Origin'] = origin
|
headers['X-Origin'] = origin
|
||||||
|
|
||||||
|
return headers
|
||||||
|
|
||||||
|
def generate_api_headers(
|
||||||
|
self, *, ytcfg=None, account_syncid=None, session_index=None,
|
||||||
|
visitor_data=None, api_hostname=None, default_client='web', **kwargs):
|
||||||
|
|
||||||
|
origin = 'https://' + (self._select_api_hostname(api_hostname, default_client))
|
||||||
|
headers = {
|
||||||
|
'X-YouTube-Client-Name': str(
|
||||||
|
self._ytcfg_get_safe(ytcfg, lambda x: x['INNERTUBE_CONTEXT_CLIENT_NAME'], default_client=default_client)),
|
||||||
|
'X-YouTube-Client-Version': self._extract_client_version(ytcfg, default_client),
|
||||||
|
'Origin': origin,
|
||||||
|
'X-Goog-Visitor-Id': visitor_data or self._extract_visitor_data(ytcfg),
|
||||||
|
'User-Agent': self._ytcfg_get_safe(ytcfg, lambda x: x['INNERTUBE_CONTEXT']['client']['userAgent'], default_client=default_client),
|
||||||
|
**self._generate_cookie_auth_headers(ytcfg=ytcfg, account_syncid=account_syncid, session_index=session_index, origin=origin),
|
||||||
|
}
|
||||||
return filter_dict(headers)
|
return filter_dict(headers)
|
||||||
|
|
||||||
def _download_ytcfg(self, client, video_id):
|
def _download_ytcfg(self, client, video_id):
|
||||||
@ -7442,9 +7444,6 @@ class YoutubeFeedsInfoExtractor(InfoExtractor):
|
|||||||
_LOGIN_REQUIRED = True
|
_LOGIN_REQUIRED = True
|
||||||
_FEED_NAME = 'feeds'
|
_FEED_NAME = 'feeds'
|
||||||
|
|
||||||
def _real_initialize(self):
|
|
||||||
YoutubeBaseInfoExtractor._check_login_required(self)
|
|
||||||
|
|
||||||
@classproperty
|
@classproperty
|
||||||
def IE_NAME(cls):
|
def IE_NAME(cls):
|
||||||
return f'youtube:{cls._FEED_NAME}'
|
return f'youtube:{cls._FEED_NAME}'
|
||||||
|
Loading…
Reference in New Issue
Block a user