+ def process_info(self, info_dict):
+ """Process a single dictionary returned by an InfoExtractor."""
+ # Forced printings
+ if self.params.get('forcetitle', False):
+ print info_dict['title']
+ if self.params.get('forceurl', False):
+ print info_dict['url']
+
+ # Do nothing else if in simulate mode
+ if self.params.get('simulate', False):
+ return 0
+
+ try:
+ filename = self.params['outtmpl'] % info_dict
+ self.report_destination(filename)
+ except (ValueError, KeyError), err:
+ return self.trouble('ERROR: invalid output template or system charset: %s' % str(err))
+ if self.params['nooverwrites'] and os.path.exists(filename):
+ self.to_stderr('WARNING: file exists: %s; skipping' % filename)
+ return 0
+ try:
+ self.pmkdir(filename)
+ except (OSError, IOError), err:
+ return self.trouble('ERROR: unable to create directories: %s' % str(err))
+ try:
+ outstream = open(filename, 'wb')
+ except (OSError, IOError), err:
+ return self.trouble('ERROR: unable to open for writing: %s' % str(err))
+ try:
+ self._do_download(outstream, info_dict['url'])
+ outstream.close()
+ except (OSError, IOError), err:
+ return self.trouble('ERROR: unable to write video data: %s' % str(err))
+ except (urllib2.URLError, httplib.HTTPException, socket.error), err:
+ return self.trouble('ERROR: unable to download video data: %s' % str(err))
+ try:
+ self.post_process(filename, info_dict)
+ except (PostProcessingError), err:
+ return self.trouble('ERROR: postprocessing: %s' % str(err))
+
+ return 0
+