[extractor/youtube] Add androidSdkVersion parameter to Android Innertube clients

Required to prevent YouTube returning a bad player response in some cases.

See: https://github.com/yt-dlp/yt-dlp/pull/4593, https://github.com/TeamNewPipe/NewPipe/issues/8713, https://github.com/iv-org/invidious/issues/3230, https://github.com/Tyrrrz/YoutubeExplode/issues/647

Authored by: coletdjnz
This commit is contained in:
coletdjnz 2022-08-08 12:01:57 +12:00
parent 298d9c0e89
commit c7dcf0b31e
No known key found for this signature in database
GPG key ID: 91984263BB39894A

View file

@ -109,7 +109,8 @@ INNERTUBE_CLIENTS = {
'INNERTUBE_CONTEXT': { 'INNERTUBE_CONTEXT': {
'client': { 'client': {
'clientName': 'ANDROID', 'clientName': 'ANDROID',
'clientVersion': '17.28.34', 'clientVersion': '17.29.34',
'androidSdkVersion': 30
} }
}, },
'INNERTUBE_CONTEXT_CLIENT_NAME': 3, 'INNERTUBE_CONTEXT_CLIENT_NAME': 3,
@ -120,7 +121,8 @@ INNERTUBE_CLIENTS = {
'INNERTUBE_CONTEXT': { 'INNERTUBE_CONTEXT': {
'client': { 'client': {
'clientName': 'ANDROID_EMBEDDED_PLAYER', 'clientName': 'ANDROID_EMBEDDED_PLAYER',
'clientVersion': '17.28.34', 'clientVersion': '17.29.34',
'androidSdkVersion': 30
}, },
}, },
'INNERTUBE_CONTEXT_CLIENT_NAME': 55, 'INNERTUBE_CONTEXT_CLIENT_NAME': 55,
@ -132,6 +134,7 @@ INNERTUBE_CLIENTS = {
'client': { 'client': {
'clientName': 'ANDROID_MUSIC', 'clientName': 'ANDROID_MUSIC',
'clientVersion': '5.16.51', 'clientVersion': '5.16.51',
'androidSdkVersion': 30
} }
}, },
'INNERTUBE_CONTEXT_CLIENT_NAME': 21, 'INNERTUBE_CONTEXT_CLIENT_NAME': 21,
@ -143,6 +146,7 @@ INNERTUBE_CLIENTS = {
'client': { 'client': {
'clientName': 'ANDROID_CREATOR', 'clientName': 'ANDROID_CREATOR',
'clientVersion': '22.28.100', 'clientVersion': '22.28.100',
'androidSdkVersion': 30
}, },
}, },
'INNERTUBE_CONTEXT_CLIENT_NAME': 14, 'INNERTUBE_CONTEXT_CLIENT_NAME': 14,
@ -3142,7 +3146,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
pr_video_id = traverse_obj(pr, ('videoDetails', 'videoId')) pr_video_id = traverse_obj(pr, ('videoDetails', 'videoId'))
if pr_video_id and pr_video_id != video_id: if pr_video_id and pr_video_id != video_id:
self.report_warning( self.report_warning(
f'{client} client returned a player response for "{pr_video_id}" instead of "{video_id}"' + bug_reports_message()) f'Skipping player response from {client} client (got player response for video "{pr_video_id}" instead of "{video_id}")' + bug_reports_message())
else: else:
prs.append(pr) prs.append(pr)