[youtube] Improve channel syncid extraction to support ytcfg (#241)

Authored by: colethedj
This commit is contained in:
coletdjnz 2021-04-14 05:07:03 +00:00 committed by GitHub
parent 921b76cab8
commit 8ea3f7b909
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -336,14 +336,19 @@ def _extract_identity_token(self, webpage, item_id):
@staticmethod @staticmethod
def _extract_account_syncid(data): def _extract_account_syncid(data):
"""Extract syncId required to download private playlists of secondary channels""" """
sync_ids = ( Extract syncId required to download private playlists of secondary channels
try_get(data, lambda x: x['responseContext']['mainAppWebResponseContext']['datasyncId'], compat_str) @param data Either response or ytcfg
or '').split("||") """
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]: if len(sync_ids) >= 2 and sync_ids[1]:
# datasyncid is of the form "channel_syncid||user_syncid" for secondary channel # 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 # and just "user_syncid||" for primary channel. We only want the channel_syncid
return sync_ids[0] 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): def _extract_ytcfg(self, video_id, webpage):
return self._parse_json( return self._parse_json(