+ def process_info(self, info_dict):
+ """Process a single dictionary returned by an InfoExtractor."""
+ # Do nothing else if in simulate mode
+ if self.params.get('simulate', False):
+ try:
+ self.verify_url(info_dict['url'])
+ except (OSError, IOError, urllib2.URLError, httplib.HTTPException, socket.error), err:
+ raise UnavailableFormatError
+
+ # Forced printings
+ if self.params.get('forcetitle', False):
+ print info_dict['title'].encode(locale.getpreferredencoding())
+ if self.params.get('forceurl', False):
+ print info_dict['url'].encode(locale.getpreferredencoding())
+
+ return
+
+ try:
+ template_dict = dict(info_dict)
+ template_dict['epoch'] = unicode(long(time.time()))
+ filename = self.params['outtmpl'] % template_dict
+ self.report_destination(filename)
+ except (ValueError, KeyError), err:
+ 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
+
+ try:
+ self.pmkdir(filename)
+ except (OSError, IOError), err:
+ self.trouble('ERROR: unable to create directories: %s' % str(err))
+ return
+
+ try:
+ outstream = open(filename, 'ab')
+ except (OSError, IOError), err:
+ self.trouble('ERROR: unable to open for writing: %s' % str(err))
+ return
+
+ try:
+ self._do_download(outstream, info_dict['url'])
+ outstream.close()
+ except (OSError, IOError), err:
+ outstream.close()
+ os.remove(filename)
+ raise UnavailableFormatError
+ except (urllib2.URLError, httplib.HTTPException, socket.error), err:
+ self.trouble('ERROR: unable to download video data: %s' % str(err))
+ return
+ except (ContentTooShortError, ), err:
+ self.trouble('ERROR: content too short (expected %s bytes and served %s)' % (err.expected, err.downloaded))
+ return
+
+ try:
+ self.post_process(filename, info_dict)
+ except (PostProcessingError), err:
+ self.trouble('ERROR: postprocessing: %s' % str(err))
+ return
+