mirror of https://github.com/yt-dlp/yt-dlp.git
`extract_info` now expects `ie.extract` to return a list in the format proposed in issue 608.
Each element should have a '_type' key specifying if it's a video, an url or a playlist. `extract_info` will process each element to get the full info
This commit is contained in:
parent
f6e6da9525
commit
6ac7f082c4
|
@ -410,12 +410,9 @@ class FileDownloader(object):
|
|||
|
||||
# Extract information from URL and process it
|
||||
try:
|
||||
videos = ie.extract(url)
|
||||
for video in videos or []:
|
||||
if not 'extractor' in video:
|
||||
#The extractor has already been set somewher else
|
||||
video['extractor'] = ie.IE_NAME
|
||||
return videos
|
||||
ie_results = ie.extract(url)
|
||||
results = self.process_ie_results(ie_results, ie)
|
||||
return results
|
||||
except ExtractorError as de: # An error we somewhat expected
|
||||
self.trouble(u'ERROR: ' + compat_str(de), de.format_traceback())
|
||||
break
|
||||
|
@ -435,6 +432,29 @@ class FileDownloader(object):
|
|||
for url in urls:
|
||||
results.extend(self.extract_info(url))
|
||||
return results
|
||||
|
||||
def process_ie_results(self, ie_results, ie):
|
||||
"""
|
||||
Take the results of the ie and return a list of videos.
|
||||
For url elements it will seartch the suitable ie and get the videos
|
||||
For playlist elements it will process each of the elements of the 'entries' key
|
||||
"""
|
||||
results = []
|
||||
for result in ie_results or []:
|
||||
result_type = result.get('_type', 'video') #If not given we suppose it's a video, support the dafault old system
|
||||
if result_type == 'video':
|
||||
if not 'extractor' in result:
|
||||
#The extractor has already been set somewhere else
|
||||
result['extractor'] = ie.IE_NAME
|
||||
results.append(result)
|
||||
elif result_type == 'url':
|
||||
#We get the videos pointed by the url
|
||||
results.extend(self.extract_info(result['url']))
|
||||
elif result_type == 'playlist':
|
||||
#We process each entry in the playlist
|
||||
entries_result = self.process_ie_results(result['entries'], ie)
|
||||
results.extend(entries_result)
|
||||
return results
|
||||
|
||||
def process_info(self, info_dict):
|
||||
"""Process a single dictionary returned by an InfoExtractor."""
|
||||
|
|
Loading…
Reference in New Issue