X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube-dl;h=db9510f7be78ab3ec7e18f57b1ea39dc74a3643e;hb=0e543200095a6505ebedfb63be4317bba2c3506a;hp=8143de35e90fa2f92b4e163fec4523ccbcec0a65;hpb=2740c509b3c19fe8589b6aa6f746005aa12a7f82;p=youtube-dl diff --git a/youtube-dl b/youtube-dl index 8143de35e..db9510f7b 100755 --- a/youtube-dl +++ b/youtube-dl @@ -260,7 +260,9 @@ class FileDownloader(object): return try: - filename = self.params['outtmpl'] % info_dict + 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)) @@ -284,11 +286,8 @@ class FileDownloader(object): self._do_download(outstream, info_dict['url']) outstream.close() except (OSError, IOError), err: - if info_dict['best_quality']: - raise UnavailableFormatError - else: - self.trouble('ERROR: unable to write video data: %s' % str(err)) - return + 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 @@ -436,7 +435,7 @@ class YoutubeIE(InfoExtractor): _LOGIN_URL = 'http://www.youtube.com/signup?next=/&gl=US&hl=en' _AGE_URL = 'http://www.youtube.com/verify_age?next_url=/&gl=US&hl=en' _NETRC_MACHINE = 'youtube' - _available_formats = ['22', '18', '17', '13'] # listed in order of priority for -b flag + _available_formats = ['22', '35', '18', '17', '13'] # listed in order of priority for -b flag _video_extensions = { '13': '3gp', '17': 'mp4', @@ -643,21 +642,25 @@ class YoutubeIE(InfoExtractor): 'title': video_title, 'stitle': simple_title, 'ext': video_extension.decode('utf-8'), - 'best_quality': best_quality, }) return - except UnavailableFormatError: - if quality_index == len(self._available_formats) - 1: - # I don't ever expect this to happen - self._downloader.trouble(u'ERROR: no known formats available for video') + except UnavailableFormatError, err: + if best_quality: + if quality_index == len(self._available_formats) - 1: + # I don't ever expect this to happen + self._downloader.trouble(u'ERROR: no known formats available for video') + return + else: + self.report_unavailable_format(video_id, format_param) + quality_index += 1 + format_param = self._available_formats[quality_index] + continue + else: + self._downloader.trouble('ERROR: format not available for video') return - else: - self.report_unavailable_format(video_id, format_param) - quality_index += 1 - format_param = self._available_formats[quality_index] - continue + class MetacafeIE(InfoExtractor): """Information Extractor for metacafe.com.""" @@ -769,16 +772,18 @@ class MetacafeIE(InfoExtractor): return video_uploader = mobj.group(1) - # Process video information - self._downloader.process_info({ - 'id': video_id.decode('utf-8'), - 'url': video_url.decode('utf-8'), - 'uploader': video_uploader.decode('utf-8'), - 'title': video_title, - 'stitle': simple_title, - 'ext': video_extension.decode('utf-8'), - 'best_quality': False, # TODO - }) + try: + # Process video information + self._downloader.process_info({ + 'id': video_id.decode('utf-8'), + 'url': video_url.decode('utf-8'), + 'uploader': video_uploader.decode('utf-8'), + 'title': video_title, + 'stitle': simple_title, + 'ext': video_extension.decode('utf-8'), + }) + except UnavailableFormatError: + self._downloader.trouble(u'ERROR: format not available for video') class YoutubeSearchIE(InfoExtractor): @@ -1033,13 +1038,13 @@ if __name__ == '__main__': action='store_true', dest='geturl', help='simulate, quiet but print URL', default=False) verbosity.add_option('-e', '--get-title', action='store_true', dest='gettitle', help='simulate, quiet but print title', default=False) - verbosity.add_option('-t', '--title', - action='store_true', dest='usetitle', help='use title in file name', default=False) - verbosity.add_option('-l', '--literal', - action='store_true', dest='useliteral', help='use literal title in file name', default=False) parser.add_option_group(verbosity) filesystem = optparse.OptionGroup(parser, 'Filesystem Options') + filesystem.add_option('-t', '--title', + action='store_true', dest='usetitle', help='use title in file name', default=False) + filesystem.add_option('-l', '--literal', + action='store_true', dest='useliteral', help='use literal title in file name', default=False) filesystem.add_option('-o', '--output', dest='outtmpl', metavar='TPL', help='output filename template') filesystem.add_option('-a', '--batch-file', @@ -1079,8 +1084,13 @@ if __name__ == '__main__': if numeric_limit is None: parser.error(u'invalid rate limit specified') opts.ratelimit = numeric_limit - if len(opts.format) > 1: + if opts.format is not None and len(opts.format) > 1: parser.error(u'pass at most one of the video format option flags (-f, -b, -m, -d)') + if opts.format is None: + real_format = None + else: + real_format = opts.format[0] + # Information extractors youtube_ie = YoutubeIE() @@ -1097,7 +1107,7 @@ if __name__ == '__main__': 'forceurl': opts.geturl, 'forcetitle': opts.gettitle, 'simulate': (opts.simulate or opts.geturl or opts.gettitle), - 'format': opts.format[0], + 'format': real_format, 'outtmpl': ((opts.outtmpl is not None and opts.outtmpl.decode(locale.getpreferredencoding())) or (opts.usetitle and u'%(stitle)s-%(id)s.%(ext)s') or (opts.useliteral and u'%(title)s-%(id)s.%(ext)s')