mirror of
https://github.com/blackjack4494/yt-dlc.git
synced 2025-01-03 05:36:07 +00:00
[youtube] stop loading pages if videos are already seen
This commit is contained in:
parent
965a404be3
commit
29e9c94948
1 changed files with 11 additions and 2 deletions
|
@ -2894,6 +2894,7 @@ class YoutubePlaylistIE(YoutubePlaylistBaseInfoExtractor):
|
||||||
yt_initial = self._get_yt_initial_data('', page)
|
yt_initial = self._get_yt_initial_data('', page)
|
||||||
if yt_initial:
|
if yt_initial:
|
||||||
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)
|
||||||
|
video_ids = []
|
||||||
entries = []
|
entries = []
|
||||||
playlist_page = 1
|
playlist_page = 1
|
||||||
api_key = self._search_regex(
|
api_key = self._search_regex(
|
||||||
|
@ -2908,6 +2909,10 @@ class YoutubePlaylistIE(YoutubePlaylistBaseInfoExtractor):
|
||||||
item_video = try_get(item, lambda x: x['playlistVideoRenderer'], dict)
|
item_video = try_get(item, lambda x: x['playlistVideoRenderer'], dict)
|
||||||
if item_video:
|
if item_video:
|
||||||
video_id = try_get(item_video, lambda x: x['videoId'], compat_str)
|
video_id = try_get(item_video, lambda x: x['videoId'], compat_str)
|
||||||
|
if video_id in video_ids:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
video_ids.append(video_id)
|
||||||
entry = {
|
entry = {
|
||||||
'_type': 'url',
|
'_type': 'url',
|
||||||
'duration': int_or_none(try_get(item_video, lambda x: x['lengthSeconds'], compat_str)),
|
'duration': int_or_none(try_get(item_video, lambda x: x['lengthSeconds'], compat_str)),
|
||||||
|
@ -2927,7 +2932,7 @@ class YoutubePlaylistIE(YoutubePlaylistBaseInfoExtractor):
|
||||||
'context': {
|
'context': {
|
||||||
'client': {
|
'client': {
|
||||||
'clientName': 'WEB',
|
'clientName': 'WEB',
|
||||||
'clientVersion': api_client_version,
|
'clientVersion': api_client_version
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'continuation': continuation_token
|
'continuation': continuation_token
|
||||||
|
@ -2941,7 +2946,11 @@ class YoutubePlaylistIE(YoutubePlaylistBaseInfoExtractor):
|
||||||
video_id=playlist_id)
|
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)
|
# load more pages until we get a page of all videos already in the playlist (some playlists loop)
|
||||||
|
video_ids_new = [try_get(i, lambda x: x['playlistVideoRenderer']['videoId'], compat_str) for i in playlist_items_new]
|
||||||
|
video_ids_new = [i for i in video_ids_new if i and i not in video_ids]
|
||||||
|
if video_ids_new:
|
||||||
|
playlist_items.extend(playlist_items_new)
|
||||||
|
|
||||||
playlist_title = try_get(yt_initial, lambda x: x['microformat']['microformatDataRenderer']['title'], compat_str)
|
playlist_title = try_get(yt_initial, lambda x: x['microformat']['microformatDataRenderer']['title'], compat_str)
|
||||||
playlist_description = try_get(yt_initial, lambda x: x['microformat']['microformatDataRenderer']['description'], compat_str)
|
playlist_description = try_get(yt_initial, lambda x: x['microformat']['microformatDataRenderer']['description'], compat_str)
|
||||||
|
|
Loading…
Reference in a new issue