From: pukkandan Date: Thu, 24 Mar 2022 23:30:41 +0000 (+0530) Subject: [youtube] Try embedded client variants before agegate X-Git-Tag: 2022.04.08~80 X-Git-Url: https://jfr.im/git/yt-dlp.git/commitdiff_plain/ae72962643aa43b1e1037293b226acc71fb34297 [youtube] Try embedded client variants before agegate agegate variants appears to be broken, but don't remove them for the time-being --- diff --git a/yt_dlp/extractor/youtube.py b/yt_dlp/extractor/youtube.py index d74d5b0e9..8ee688798 100644 --- a/yt_dlp/extractor/youtube.py +++ b/yt_dlp/extractor/youtube.py @@ -2940,13 +2940,18 @@ def _extract_player_responses(self, clients, video_id, webpage, master_ytcfg): webpage, self._YT_INITIAL_PLAYER_RESPONSE_RE, video_id, 'initial player response') - original_clients = clients + all_clients = set(clients) clients = clients[::-1] prs = [] - def append_client(client_name): - if client_name in INNERTUBE_CLIENTS and client_name not in original_clients: - clients.append(client_name) + def append_client(*client_names): + """ Append the first client name that exists """ + for client_name in client_names: + if client_name in INNERTUBE_CLIENTS: + if client_name not in all_clients: + clients.append(client_name) + all_clients.add(client_name) + return # Android player_response does not have microFormats which are needed for # extraction of some data. So we return the initial_pr with formats @@ -2992,7 +2997,7 @@ def append_client(client_name): if client.endswith('_agegate') and self._is_unplayable(pr) and self.is_authenticated: append_client(client.replace('_agegate', '_creator')) elif self._is_agegated(pr): - append_client(f'{client}_agegate') + append_client(f'{client}_embedded', f'{client.replace("_embedded", "")}_agegate') if last_error: if not len(prs):