diff --git a/yt_dlp/extractor/youtube.py b/yt_dlp/extractor/youtube.py index ea09ad3581..54b9ce94cb 100644 --- a/yt_dlp/extractor/youtube.py +++ b/yt_dlp/extractor/youtube.py @@ -336,14 +336,19 @@ def _extract_identity_token(self, webpage, item_id): @staticmethod def _extract_account_syncid(data): - """Extract syncId required to download private playlists of secondary channels""" - sync_ids = ( - try_get(data, lambda x: x['responseContext']['mainAppWebResponseContext']['datasyncId'], compat_str) - or '').split("||") + """ + Extract syncId required to download private playlists of secondary channels + @param data Either response or ytcfg + """ + sync_ids = (try_get( + data, (lambda x: x['responseContext']['mainAppWebResponseContext']['datasyncId'], + lambda x: x['DATASYNC_ID']), compat_str) or '').split("||") if len(sync_ids) >= 2 and sync_ids[1]: # datasyncid is of the form "channel_syncid||user_syncid" for secondary channel # and just "user_syncid||" for primary channel. We only want the channel_syncid return sync_ids[0] + # ytcfg includes channel_syncid if on secondary channel + return data.get('DELEGATED_SESSION_ID') def _extract_ytcfg(self, video_id, webpage): return self._parse_json(