summaryrefslogtreecommitdiffhomepage
path: root/youtube_dl/FileDownloader.py
diff options
context:
space:
mode:
authorJaime Marquínez Ferrándiz <[email protected]>2013-05-14 14:40:40 +0200
committerJaime Marquínez Ferrándiz <[email protected]>2013-05-14 14:40:40 +0200
commit7bdb17d4d52121624286207489154908fd5a773f (patch)
tree69f2f7dfbac6576a63da08981f4c942393419c6d /youtube_dl/FileDownloader.py
parent419c64b107896628a159f558abdb298117249b9a (diff)
downloadyoutube-dl-7bdb17d4d52121624286207489154908fd5a773f.tar.gz
youtube-dl-7bdb17d4d52121624286207489154908fd5a773f.zip
Add extra_info argument to extract_info and process_ie_result
It allows to update the info_dicts with other values (closes #840)
Diffstat (limited to 'youtube_dl/FileDownloader.py')
-rw-r--r--youtube_dl/FileDownloader.py26
1 files changed, 20 insertions, 6 deletions
diff --git a/youtube_dl/FileDownloader.py b/youtube_dl/FileDownloader.py
index 8a3bdf21b..52017a6c3 100644
--- a/youtube_dl/FileDownloader.py
+++ b/youtube_dl/FileDownloader.py
@@ -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 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.
If 'download', also downloads the videos.
+ extra_info is a dict containing the extra values to add to each result
'''
if ie_key:
@@ -463,10 +464,14 @@ class FileDownloader(object):
break
if isinstance(ie_result, list):
# Backwards compatibility: old IE result format
+ for result in ie_result:
+ result.update(extra_info)
ie_result = {
'_type': 'compat_list',
'entries': ie_result,
}
+ else:
+ ie_result.update(extra_info)
if 'extractor' not in ie_result:
ie_result['extractor'] = ie.IE_NAME
return self.process_ie_result(ie_result, download=download)
@@ -482,7 +487,7 @@ class FileDownloader(object):
else:
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
references (URLs, playlist items).
@@ -501,7 +506,12 @@ class FileDownloader(object):
self.process_info(ie_result)
return ie_result
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':
# We process each entry in the playlist
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):
self.to_screen(u'[download] Downloading video #%s of %s' %(i, n_entries))
- entry['playlist'] = playlist
- entry['playlist_index'] = i + playliststart
- entry_result = self.process_ie_result(entry, download=download)
+ extra = {
+ 'playlist': playlist,
+ 'playlist_index': i + playliststart,
+ }
+ entry_result = self.process_ie_result(entry,
+ download=download,
+ extra_info=extra)
playlist_results.append(entry_result)
ie_result['entries'] = playlist_results
return ie_result