[youtube] use api key and client version from page

This commit is contained in:
insaneracist 2020-11-10 06:14:25 -08:00
parent 0137a782cf
commit b2a462a24c

View File

@ -2896,6 +2896,12 @@ class YoutubePlaylistIE(YoutubePlaylistBaseInfoExtractor):
playlist_items = try_get(yt_initial, lambda x: x['contents']['twoColumnBrowseResultsRenderer']['tabs'][0]['tabRenderer']['content']['sectionListRenderer']['contents'][0]['itemSectionRenderer']['contents'][0]['playlistVideoListRenderer']['contents'], list) playlist_items = try_get(yt_initial, lambda x: x['contents']['twoColumnBrowseResultsRenderer']['tabs'][0]['tabRenderer']['content']['sectionListRenderer']['contents'][0]['itemSectionRenderer']['contents'][0]['playlistVideoListRenderer']['contents'], list)
entries = [] entries = []
playlist_page = 1 playlist_page = 1
api_key = self._search_regex(
r'"INNERTUBE_API_KEY":"([^"]+)"',
page, 'api key', default="AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8", fatal=False)
api_client_version = self._search_regex(
r'"INNERTUBE_CONTEXT_CLIENT_VERSION":"([^"]+)"',
page, 'client version', fatal=False)
while playlist_items: while playlist_items:
item = playlist_items.pop(0) item = playlist_items.pop(0)
item_video = try_get(item, lambda x: x['playlistVideoRenderer'], dict) item_video = try_get(item, lambda x: x['playlistVideoRenderer'], dict)
@ -2919,18 +2925,18 @@ class YoutubePlaylistIE(YoutubePlaylistBaseInfoExtractor):
'context': { 'context': {
'client': { 'client': {
'clientName': 'WEB', 'clientName': 'WEB',
'clientVersion': '2.20201021.03.00', 'clientVersion': api_client_version,
} }
}, },
'continuation': continuation_token 'continuation': continuation_token
} }
response = self._download_json( response = self._download_json(
'https://www.youtube.com/youtubei/v1/browse?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8', 'https://www.youtube.com/youtubei/v1/browse?key=%s' % api_key,
data=json.dumps(request_data).encode('utf8'), data=json.dumps(request_data).encode('utf8'),
errnote='Unable to download playlist page', fatal=False, errnote='Unable to download playlist page', fatal=False,
headers={'Content-Type': 'application/json'}, headers={'Content-Type': 'application/json'},
note='Downloading page %s' % playlist_page, note='Downloading page %s' % playlist_page,
video_id='playlist page %s' % playlist_page) video_id=playlist_id)
playlist_items_new = try_get(response, lambda x: x['onResponseReceivedActions'][0]['appendContinuationItemsAction']['continuationItems'], list) playlist_items_new = try_get(response, lambda x: x['onResponseReceivedActions'][0]['appendContinuationItemsAction']['continuationItems'], list)
if playlist_items_new: if playlist_items_new:
playlist_items.extend(playlist_items_new) playlist_items.extend(playlist_items_new)