mirror of
https://github.com/l1ving/youtube-dl
synced 2024-11-22 21:45:35 +08:00
Create extract_info method
This commit is contained in:
parent
691db5ba02
commit
df8db1aa21
@ -378,6 +378,44 @@ class FileDownloader(object):
|
|||||||
return u'"' + title + '" title matched reject pattern "' + rejecttitle + '"'
|
return u'"' + title + '" title matched reject pattern "' + rejecttitle + '"'
|
||||||
return None
|
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):
|
def process_info(self, info_dict):
|
||||||
"""Process a single dictionary returned by an InfoExtractor."""
|
"""Process a single dictionary returned by an InfoExtractor."""
|
||||||
|
|
||||||
@ -488,50 +526,15 @@ class FileDownloader(object):
|
|||||||
raise SameFileError(self.params['outtmpl'])
|
raise SameFileError(self.params['outtmpl'])
|
||||||
|
|
||||||
for url in url_list:
|
for url in url_list:
|
||||||
suitable_found = False
|
videos = self.extract_info(url)
|
||||||
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)
|
|
||||||
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 []:
|
for video in videos or []:
|
||||||
video['extractor'] = ie.IE_NAME
|
|
||||||
try:
|
try:
|
||||||
self.increment_downloads()
|
self.increment_downloads()
|
||||||
self.process_info(video)
|
self.process_info(video)
|
||||||
except UnavailableVideoError:
|
except UnavailableVideoError:
|
||||||
self.trouble(u'\nERROR: unable to download video')
|
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)
|
|
||||||
|
|
||||||
return self._download_retcode
|
return self._download_retcode
|
||||||
|
|
||||||
def post_process(self, filename, ie_info):
|
def post_process(self, filename, ie_info):
|
||||||
|
Loading…
Reference in New Issue
Block a user