mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-04 00:47:08 -05:00 
			
		
		
		
	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:
		@@ -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."""
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user