Fix search to not depend on index position for videoRenderer and token items.
This commit is contained in:
parent
d052b9a112
commit
0366ae8756
1 changed files with 29 additions and 10 deletions
|
@ -3336,10 +3336,33 @@ class YoutubeSearchIE(SearchInfoExtractor, YoutubePlaylistBaseInfoExtractor):
|
||||||
list)
|
list)
|
||||||
if not slr_contents:
|
if not slr_contents:
|
||||||
break
|
break
|
||||||
isr_contents = try_get(
|
|
||||||
slr_contents,
|
isr_contents = []
|
||||||
lambda x: x[0]['itemSectionRenderer']['contents'],
|
continuation_token = None
|
||||||
list)
|
# Youtube sometimes adds promoted content to searches,
|
||||||
|
# changing the index location of videos and token.
|
||||||
|
# So we search through all entries till we find them.
|
||||||
|
for index, isr in enumerate(slr_contents):
|
||||||
|
if len(isr_contents) == 0:
|
||||||
|
isr_contents = try_get(
|
||||||
|
slr_contents,
|
||||||
|
(lambda x: x[index]['itemSectionRenderer']['contents']),
|
||||||
|
list)
|
||||||
|
for content in isr_contents:
|
||||||
|
if content.get('videoRenderer') is not None:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
isr_contents = []
|
||||||
|
|
||||||
|
if continuation_token is None:
|
||||||
|
continuation_token = try_get(
|
||||||
|
slr_contents,
|
||||||
|
lambda x: x[index]['continuationItemRenderer']['continuationEndpoint']['continuationCommand'][
|
||||||
|
'token'],
|
||||||
|
compat_str)
|
||||||
|
if continuation_token is not None and isr_contents != []:
|
||||||
|
break
|
||||||
|
|
||||||
if not isr_contents:
|
if not isr_contents:
|
||||||
break
|
break
|
||||||
for content in isr_contents:
|
for content in isr_contents:
|
||||||
|
@ -3373,13 +3396,9 @@ class YoutubeSearchIE(SearchInfoExtractor, YoutubePlaylistBaseInfoExtractor):
|
||||||
}
|
}
|
||||||
if total == n:
|
if total == n:
|
||||||
return
|
return
|
||||||
token = try_get(
|
if not continuation_token:
|
||||||
slr_contents,
|
|
||||||
lambda x: x[1]['continuationItemRenderer']['continuationEndpoint']['continuationCommand']['token'],
|
|
||||||
compat_str)
|
|
||||||
if not token:
|
|
||||||
break
|
break
|
||||||
data['continuation'] = token
|
data['continuation'] = continuation_token
|
||||||
|
|
||||||
def _get_n_results(self, query, n):
|
def _get_n_results(self, query, n):
|
||||||
"""Get a specified number of results for a query"""
|
"""Get a specified number of results for a query"""
|
||||||
|
|
Loading…
Reference in a new issue