diff options
| -rw-r--r-- | youtube_dl/FileDownloader.py | 32 | 
1 files changed, 26 insertions, 6 deletions
| diff --git a/youtube_dl/FileDownloader.py b/youtube_dl/FileDownloader.py index 9b630c123..68fad11bc 100644 --- a/youtube_dl/FileDownloader.py +++ b/youtube_dl/FileDownloader.py @@ -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.""" | 
