[youtube] Fix community page continuation (Closes #152)

This commit is contained in:
pukkandan 2021-03-07 10:57:45 +05:30
parent feee67ae88
commit 26fe8ffed0
No known key found for this signature in database
GPG key ID: 0F00D95A001F4698

View file

@ -26,6 +26,7 @@
from ..jsinterp import JSInterpreter from ..jsinterp import JSInterpreter
from ..utils import ( from ..utils import (
clean_html, clean_html,
dict_get,
ExtractorError, ExtractorError,
format_field, format_field,
float_or_none, float_or_none,
@ -2797,7 +2798,8 @@ def extract_entries(parent_renderer): # this needs to called again for continua
else: else:
# Youtube sometimes sends incomplete data # Youtube sometimes sends incomplete data
# See: https://github.com/ytdl-org/youtube-dl/issues/28194 # See: https://github.com/ytdl-org/youtube-dl/issues/28194
if response.get('continuationContents') or response.get('onResponseReceivedActions'): if dict_get(response,
('continuationContents', 'onResponseReceivedActions', 'onResponseReceivedEndpoints')):
break break
# Youtube may send alerts if there was an issue with the continuation page # Youtube may send alerts if there was an issue with the continuation page
@ -2837,9 +2839,11 @@ def extract_entries(parent_renderer): # this needs to called again for continua
'playlistVideoRenderer': (self._playlist_entries, 'contents'), 'playlistVideoRenderer': (self._playlist_entries, 'contents'),
'itemSectionRenderer': (extract_entries, 'contents'), # for feeds 'itemSectionRenderer': (extract_entries, 'contents'), # for feeds
'richItemRenderer': (extract_entries, 'contents'), # for hashtag 'richItemRenderer': (extract_entries, 'contents'), # for hashtag
'backstagePostThreadRenderer': (self._post_thread_continuation_entries, 'contents')
} }
continuation_items = try_get( continuation_items = try_get(
response, lambda x: x['onResponseReceivedActions'][0]['appendContinuationItemsAction']['continuationItems'], list) response,
lambda x: dict_get(x, ('onResponseReceivedActions', 'onResponseReceivedEndpoints'))[0]['appendContinuationItemsAction']['continuationItems'], list)
continuation_item = try_get(continuation_items, lambda x: x[0], dict) or {} continuation_item = try_get(continuation_items, lambda x: x[0], dict) or {}
video_items_renderer = None video_items_renderer = None
for key, value in continuation_item.items(): for key, value in continuation_item.items():