mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[extractor/youtube] Add innertube_host and innertube_key extractor args (#3916)
				
					
				
			Allows user to override Innertube API host or key for all requests Authored by: coletdjnz
This commit is contained in:
		| @@ -421,6 +421,10 @@ class YoutubeBaseInfoExtractor(InfoExtractor): | ||||
|             ytcfg, (lambda x: x['INNERTUBE_CLIENT_VERSION'], | ||||
|                     lambda x: x['INNERTUBE_CONTEXT']['client']['clientVersion']), compat_str, default_client) | ||||
| 
 | ||||
|     def _select_api_hostname(self, req_api_hostname, default_client=None): | ||||
|         return (self._configuration_arg('innertube_host', [''], ie_key=YoutubeIE.ie_key())[0] | ||||
|                 or req_api_hostname or self._get_innertube_host(default_client or 'web')) | ||||
| 
 | ||||
|     def _extract_api_key(self, ytcfg=None, default_client='web'): | ||||
|         return self._ytcfg_get_safe(ytcfg, lambda x: x['INNERTUBE_API_KEY'], compat_str, default_client) | ||||
| 
 | ||||
| @@ -469,11 +473,13 @@ class YoutubeBaseInfoExtractor(InfoExtractor): | ||||
|         real_headers.update({'content-type': 'application/json'}) | ||||
|         if headers: | ||||
|             real_headers.update(headers) | ||||
|         api_key = (self._configuration_arg('innertube_key', [''], ie_key=YoutubeIE.ie_key(), casesense=True)[0] | ||||
|                    or api_key or self._extract_api_key(default_client=default_client)) | ||||
|         return self._download_json( | ||||
|             f'https://{api_hostname or self._get_innertube_host(default_client)}/youtubei/v1/{ep}', | ||||
|             f'https://{self._select_api_hostname(api_hostname, default_client)}/youtubei/v1/{ep}', | ||||
|             video_id=video_id, fatal=fatal, note=note, errnote=errnote, | ||||
|             data=json.dumps(data).encode('utf8'), headers=real_headers, | ||||
|             query={'key': api_key or self._extract_api_key(), 'prettyPrint': 'false'}) | ||||
|             query={'key': api_key, 'prettyPrint': 'false'}) | ||||
| 
 | ||||
|     def extract_yt_initial_data(self, item_id, webpage, fatal=True): | ||||
|         return self._search_json(self._YT_INITIAL_DATA_RE, webpage, 'yt initial data', item_id, fatal=fatal) | ||||
| @@ -545,7 +551,7 @@ class YoutubeBaseInfoExtractor(InfoExtractor): | ||||
|             self, *, ytcfg=None, account_syncid=None, session_index=None, | ||||
|             visitor_data=None, identity_token=None, api_hostname=None, default_client='web'): | ||||
| 
 | ||||
|         origin = 'https://' + (api_hostname if api_hostname else self._get_innertube_host(default_client)) | ||||
|         origin = 'https://' + (self._select_api_hostname(api_hostname, default_client)) | ||||
|         headers = { | ||||
|             'X-YouTube-Client-Name': compat_str( | ||||
|                 self._ytcfg_get_safe(ytcfg, lambda x: x['INNERTUBE_CONTEXT_CLIENT_NAME'], default_client=default_client)), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 coletdev
					coletdev