Add extra_info argument to extract_info and process_ie_result

It allows to update the info_dicts with other values

(closes #840)
This commit is contained in:
Jaime Marquínez Ferrándiz 2013-05-14 14:40:40 +02:00
parent 419c64b107
commit 7bdb17d4d5

View file

@ -436,10 +436,11 @@ class FileDownloader(object):
return u'[download] %s upload date is not in range %s' % (date_from_str(date).isoformat(), dateRange) return u'[download] %s upload date is not in range %s' % (date_from_str(date).isoformat(), dateRange)
return None return None
def extract_info(self, url, download=True, ie_key=None): def extract_info(self, url, download=True, ie_key=None, extra_info={}):
''' '''
Returns a list with a dictionary for each video we find. Returns a list with a dictionary for each video we find.
If 'download', also downloads the videos. If 'download', also downloads the videos.
extra_info is a dict containing the extra values to add to each result
''' '''
if ie_key: if ie_key:
@ -463,10 +464,14 @@ class FileDownloader(object):
break break
if isinstance(ie_result, list): if isinstance(ie_result, list):
# Backwards compatibility: old IE result format # Backwards compatibility: old IE result format
for result in ie_result:
result.update(extra_info)
ie_result = { ie_result = {
'_type': 'compat_list', '_type': 'compat_list',
'entries': ie_result, 'entries': ie_result,
} }
else:
ie_result.update(extra_info)
if 'extractor' not in ie_result: if 'extractor' not in ie_result:
ie_result['extractor'] = ie.IE_NAME ie_result['extractor'] = ie.IE_NAME
return self.process_ie_result(ie_result, download=download) return self.process_ie_result(ie_result, download=download)
@ -482,7 +487,7 @@ class FileDownloader(object):
else: else:
self.report_error(u'no suitable InfoExtractor: %s' % url) self.report_error(u'no suitable InfoExtractor: %s' % url)
def process_ie_result(self, ie_result, download=True): def process_ie_result(self, ie_result, download=True, extra_info={}):
""" """
Take the result of the ie(may be modified) and resolve all unresolved Take the result of the ie(may be modified) and resolve all unresolved
references (URLs, playlist items). references (URLs, playlist items).
@ -501,7 +506,12 @@ class FileDownloader(object):
self.process_info(ie_result) self.process_info(ie_result)
return ie_result return ie_result
elif result_type == 'url': elif result_type == 'url':
return self.extract_info(ie_result['url'], download, ie_key=ie_result.get('ie_key')) # We have to add extra_info to the results because it may be
# contained in a playlist
return self.extract_info(ie_result['url'],
download,
ie_key=ie_result.get('ie_key'),
extra_info=extra_info)
elif result_type == 'playlist': elif result_type == 'playlist':
# We process each entry in the playlist # We process each entry in the playlist
playlist = ie_result.get('title', None) or ie_result.get('id', None) playlist = ie_result.get('title', None) or ie_result.get('id', None)
@ -525,9 +535,13 @@ class FileDownloader(object):
for i,entry in enumerate(entries,1): for i,entry in enumerate(entries,1):
self.to_screen(u'[download] Downloading video #%s of %s' %(i, n_entries)) self.to_screen(u'[download] Downloading video #%s of %s' %(i, n_entries))
entry['playlist'] = playlist extra = {
entry['playlist_index'] = i + playliststart 'playlist': playlist,
entry_result = self.process_ie_result(entry, download=download) 'playlist_index': i + playliststart,
}
entry_result = self.process_ie_result(entry,
download=download,
extra_info=extra)
playlist_results.append(entry_result) playlist_results.append(entry_result)
ie_result['entries'] = playlist_results ie_result['entries'] = playlist_results
return ie_result return ie_result