|
|
@ -377,6 +377,44 @@ class FileDownloader(object): |
|
|
|
if re.search(rejecttitle, title, re.IGNORECASE): |
|
|
|
return u'"' + title + '" title matched reject pattern "' + rejecttitle + '"' |
|
|
|
return None |
|
|
|
|
|
|
|
def extract_info(self, url): |
|
|
|
''' |
|
|
|
Returns a list with a dictionary for each video we find. |
|
|
|
''' |
|
|
|
suitable_found = False |
|
|
|
for ie in self._ies: |
|
|
|
# Go to next InfoExtractor if not suitable |
|
|
|
if not ie.suitable(url): |
|
|
|
continue |
|
|
|
|
|
|
|
# Warn if the _WORKING attribute is False |
|
|
|
if not ie.working(): |
|
|
|
self.to_stderr(u'WARNING: the program functionality for this site has been marked as broken, ' |
|
|
|
u'and will probably not work. If you want to go on, use the -i option.') |
|
|
|
|
|
|
|
# Suitable InfoExtractor found |
|
|
|
suitable_found = True |
|
|
|
|
|
|
|
# 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 |
|
|
|
except ExtractorError as de: # An error we somewhat expected |
|
|
|
self.trouble(u'ERROR: ' + compat_str(de), de.format_traceback()) |
|
|
|
break |
|
|
|
except Exception as e: |
|
|
|
if self.params.get('ignoreerrors', False): |
|
|
|
self.trouble(u'ERROR: ' + compat_str(e), tb=compat_str(traceback.format_exc())) |
|
|
|
break |
|
|
|
else: |
|
|
|
raise |
|
|
|
if not suitable_found: |
|
|
|
self.trouble(u'ERROR: no suitable InfoExtractor: %s' % url) |
|
|
|
|
|
|
|
def process_info(self, info_dict): |
|
|
|
"""Process a single dictionary returned by an InfoExtractor.""" |
|
|
@ -488,49 +526,14 @@ class FileDownloader(object): |
|
|
|
raise SameFileError(self.params['outtmpl']) |
|
|
|
|
|
|
|
for url in url_list: |
|
|
|
suitable_found = False |
|
|
|
for ie in self._ies: |
|
|
|
# Go to next InfoExtractor if not suitable |
|
|
|
if not ie.suitable(url): |
|
|
|
continue |
|
|
|
|
|
|
|
# Warn if the _WORKING attribute is False |
|
|
|
if not ie.working(): |
|
|
|
self.to_stderr(u'WARNING: the program functionality for this site has been marked as broken, ' |
|
|
|
u'and will probably not work. If you want to go on, use the -i option.') |
|
|
|
videos = self.extract_info(url) |
|
|
|
|
|
|
|
# Suitable InfoExtractor found |
|
|
|
suitable_found = True |
|
|
|
|
|
|
|
# Extract information from URL and process it |
|
|
|
for video in videos or []: |
|
|
|
try: |
|
|
|
videos = ie.extract(url) |
|
|
|
except ExtractorError as de: # An error we somewhat expected |
|
|
|
self.trouble(u'ERROR: ' + compat_str(de), de.format_traceback()) |
|
|
|
break |
|
|
|
except Exception as e: |
|
|
|
if self.params.get('ignoreerrors', False): |
|
|
|
self.trouble(u'ERROR: ' + compat_str(e), tb=compat_str(traceback.format_exc())) |
|
|
|
break |
|
|
|
else: |
|
|
|
raise |
|
|
|
|
|
|
|
if len(videos or []) > 1 and self.fixed_template(): |
|
|
|
raise SameFileError(self.params['outtmpl']) |
|
|
|
|
|
|
|
for video in videos or []: |
|
|
|
video['extractor'] = ie.IE_NAME |
|
|
|
try: |
|
|
|
self.increment_downloads() |
|
|
|
self.process_info(video) |
|
|
|
except UnavailableVideoError: |
|
|
|
self.trouble(u'\nERROR: unable to download video') |
|
|
|
|
|
|
|
# Suitable InfoExtractor had been found; go to next URL |
|
|
|
break |
|
|
|
|
|
|
|
if not suitable_found: |
|
|
|
self.trouble(u'ERROR: no suitable InfoExtractor: %s' % url) |
|
|
|
self.increment_downloads() |
|
|
|
self.process_info(video) |
|
|
|
except UnavailableVideoError: |
|
|
|
self.trouble(u'\nERROR: unable to download video') |
|
|
|
|
|
|
|
return self._download_retcode |
|
|
|
|
|
|
|