X-Git-Url: https://git.rapsys.eu/youtubedl/blobdiff_plain/c7b4d76a372777e3af76ecf9966a8ab9952e52f4..c924a4596d685b1d61cf7f28e242e2e492678b1f:/youtube_dl/FileDownloader.py diff --git a/youtube_dl/FileDownloader.py b/youtube_dl/FileDownloader.py index 8a3bdf2..49f3a87 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 @@ -734,7 +748,7 @@ class FileDownloader(object): except (IOError, OSError): self.report_warning(u'Unable to remove downloaded video file') - def _download_with_rtmpdump(self, filename, url, player_url, page_url, play_path): + def _download_with_rtmpdump(self, filename, url, player_url, page_url, play_path, tc_url): self.report_destination(filename) tmpfilename = self.temp_name(filename) @@ -749,12 +763,15 @@ class FileDownloader(object): # the connection was interrumpted and resuming appears to be # possible. This is part of rtmpdump's normal usage, AFAIK. basic_args = ['rtmpdump', '-q', '-r', url, '-o', tmpfilename] + if self.params.get('verbose', False): basic_args[1] = '-v' if player_url is not None: basic_args += ['-W', player_url] if page_url is not None: basic_args += ['--pageUrl', page_url] if play_path is not None: basic_args += ['-y', play_path] + if tc_url is not None: + basic_args += ['--tcUrl', url] args = basic_args + [[], ['-e', '-k', '1']][self.params.get('continuedl', False)] if self.params.get('verbose', False): try: @@ -810,7 +827,8 @@ class FileDownloader(object): return self._download_with_rtmpdump(filename, url, info_dict.get('player_url', None), info_dict.get('page_url', None), - info_dict.get('play_path', None)) + info_dict.get('play_path', None), + info_dict.get('tc_url', None)) tmpfilename = self.temp_name(filename) stream = None