mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[ie/youtube] Fix initial player response usage (Bugfix for 8b8b442cb0) (#10464)
				
					
				
			Authored by: seproDev
This commit is contained in:
		| @@ -3702,17 +3702,17 @@ class YoutubeIE(YoutubeBaseInfoExtractor): | ||||
|             return pr_id | ||||
| 
 | ||||
|     def _extract_player_responses(self, clients, video_id, webpage, master_ytcfg, smuggled_data): | ||||
|         initial_pr = None | ||||
|         initial_pr = ignore_initial_response = None | ||||
|         if webpage: | ||||
|             experiments = traverse_obj(master_ytcfg, ( | ||||
|                 'WEB_PLAYER_CONTEXT_CONFIGS', ..., 'serializedExperimentIds', {str}, {lambda x: x.split(',')}, ..., {str})) | ||||
|             if all(x in experiments for x in self._POTOKEN_EXPERIMENTS): | ||||
|                 self.report_warning( | ||||
|                     'Webpage contains broken formats (poToken experiment detected). Ignoring initial player response') | ||||
|                 master_ytcfg = self._get_default_ytcfg() | ||||
|             else: | ||||
|                 initial_pr = self._search_json( | ||||
|                     self._YT_INITIAL_PLAYER_RESPONSE_RE, webpage, 'initial player response', video_id, fatal=False) | ||||
|             if 'web' in clients: | ||||
|                 experiments = traverse_obj(master_ytcfg, ( | ||||
|                     'WEB_PLAYER_CONTEXT_CONFIGS', ..., 'serializedExperimentIds', {lambda x: x.split(',')}, ...)) | ||||
|                 if all(x in experiments for x in self._POTOKEN_EXPERIMENTS): | ||||
|                     self.report_warning( | ||||
|                         'Webpage contains broken formats (poToken experiment detected). Ignoring initial player response') | ||||
|                     ignore_initial_response = True | ||||
|             initial_pr = self._search_json( | ||||
|                 self._YT_INITIAL_PLAYER_RESPONSE_RE, webpage, 'initial player response', video_id, fatal=False) | ||||
| 
 | ||||
|         prs = [] | ||||
|         if initial_pr and not self._invalid_player_response(initial_pr, video_id): | ||||
| @@ -3740,8 +3740,10 @@ class YoutubeIE(YoutubeBaseInfoExtractor): | ||||
|         skipped_clients = {} | ||||
|         while clients: | ||||
|             client, base_client, variant = _split_innertube_client(clients.pop()) | ||||
|             player_ytcfg = master_ytcfg if client == 'web' else {} | ||||
|             if 'configs' not in self._configuration_arg('player_skip') and client != 'web': | ||||
|             player_ytcfg = {} | ||||
|             if client == 'web': | ||||
|                 player_ytcfg = self._get_default_ytcfg() if ignore_initial_response else master_ytcfg | ||||
|             elif 'configs' not in self._configuration_arg('player_skip'): | ||||
|                 player_ytcfg = self._download_ytcfg(client, video_id) or player_ytcfg | ||||
| 
 | ||||
|             player_url = player_url or self._extract_player_url(master_ytcfg, player_ytcfg, webpage=webpage) | ||||
| @@ -3754,7 +3756,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor): | ||||
|                 player_url = self._download_player_url(video_id) | ||||
|                 tried_iframe_fallback = True | ||||
| 
 | ||||
|             pr = initial_pr if client == 'web' and initial_pr else None | ||||
|             pr = initial_pr if client == 'web' and not ignore_initial_response else None | ||||
|             for retry in self.RetryManager(fatal=False): | ||||
|                 try: | ||||
|                     pr = pr or self._extract_player_response( | ||||
| @@ -3765,7 +3767,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor): | ||||
|                     break | ||||
|                 experiments = traverse_obj(pr, ( | ||||
|                     'responseContext', 'serviceTrackingParams', lambda _, v: v['service'] == 'GFEEDBACK', | ||||
|                     'params', lambda _, v: v['key'] == 'e', 'value', {lambda x: x.split(',')}, ..., {str})) | ||||
|                     'params', lambda _, v: v['key'] == 'e', 'value', {lambda x: x.split(',')}, ...)) | ||||
|                 if all(x in experiments for x in self._POTOKEN_EXPERIMENTS): | ||||
|                     pr = None | ||||
|                     retry.error = ExtractorError('API returned broken formats (poToken experiment detected)', expected=True) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 sepro
					sepro