X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2F__init__.py;h=80f3b9f335cd32c84295280073f1942e291a07d9;hb=b08980412eb05250100f95bf2c2c8bb764c4b4c5;hp=7df297d02e63563286e4e5f58e32e9fbe6a83bd4;hpb=c76cb6d54843695a5221ea314f399eb9cdc61442;p=youtube-dl diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 7df297d02..80f3b9f33 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -25,10 +25,14 @@ __authors__ = ( 'Jeff Crouse', 'Osama Khalid', 'Michael Walter', + 'M. Yasoob Ullah Khalid', + 'Julien Fraichard', + 'Johny Mo Swag', ) __license__ = 'Public Domain' +import codecs import getpass import optparse import os @@ -140,9 +144,14 @@ def parseOpts(overrideArguments=None): help='display the current browser identification', default=False) general.add_option('--user-agent', dest='user_agent', help='specify a custom user agent', metavar='UA') + general.add_option('--referer', + dest='referer', help='specify a custom referer, use if the video access is restricted to one domain', + metavar='REF', default=None) general.add_option('--list-extractors', action='store_true', dest='list_extractors', help='List all supported extractors and the URLs they would handle', default=False) + general.add_option('--proxy', dest='proxy', default=None, help='Use the specified HTTP/HTTPS proxy', metavar='URL') + general.add_option('--no-check-certificate', action='store_true', dest='no_check_certificate', default=False, help='Suppress HTTPS certificate validation.') general.add_option('--test', action='store_true', dest='test', default=False, help=optparse.SUPPRESS_HELP) selection.add_option('--playlist-start', @@ -154,6 +163,9 @@ def parseOpts(overrideArguments=None): selection.add_option('--max-downloads', metavar='NUMBER', dest='max_downloads', help='Abort after downloading NUMBER files', default=None) selection.add_option('--min-filesize', metavar='SIZE', dest='min_filesize', help="Do not download any videos smaller than SIZE (e.g. 50k or 44.6m)", default=None) selection.add_option('--max-filesize', metavar='SIZE', dest='max_filesize', help="Do not download any videos larger than SIZE (e.g. 50k or 44.6m)", default=None) + selection.add_option('--date', metavar='DATE', dest='date', help='download only videos uploaded in this date', default=None) + selection.add_option('--datebefore', metavar='DATE', dest='datebefore', help='download only videos uploaded before this date', default=None) + selection.add_option('--dateafter', metavar='DATE', dest='dateafter', help='download only videos uploaded after this date', default=None) authentication.add_option('-u', '--username', @@ -165,7 +177,8 @@ def parseOpts(overrideArguments=None): video_format.add_option('-f', '--format', - action='store', dest='format', metavar='FORMAT', help='video format code') + action='store', dest='format', metavar='FORMAT', + help='video format code, specifiy the order of preference using slashes: "-f 22/17/18"') video_format.add_option('--all-formats', action='store_const', dest='format', help='download all available video formats', const='all') video_format.add_option('--prefer-free-formats', @@ -203,6 +216,8 @@ def parseOpts(overrideArguments=None): 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('--get-id', + action='store_true', dest='getid', help='simulate, quiet but print id', default=False) verbosity.add_option('--get-thumbnail', action='store_true', dest='getthumbnail', help='simulate, quiet but print thumbnail URL', default=False) @@ -229,9 +244,9 @@ def parseOpts(overrideArguments=None): help='print downloaded pages to debug problems(very verbose)') filesystem.add_option('-t', '--title', - action='store_true', dest='usetitle', help='use title in file name', default=False) + action='store_true', dest='usetitle', help='use title in file name (default)', default=False) filesystem.add_option('--id', - action='store_true', dest='useid', help='use video ID in file name', default=False) + action='store_true', dest='useid', help='use only video ID in file name', default=False) filesystem.add_option('-l', '--literal', action='store_true', dest='usetitle', help='[deprecated] alias of --title', default=False) filesystem.add_option('-A', '--auto-number', @@ -276,6 +291,9 @@ def parseOpts(overrideArguments=None): filesystem.add_option('--write-info-json', action='store_true', dest='writeinfojson', help='write video metadata to a .info.json file', default=False) + filesystem.add_option('--write-thumbnail', + action='store_true', dest='writethumbnail', + help='write thumbnail image to disk', default=False) postproc.add_option('-x', '--extract-audio', action='store_true', dest='extractaudio', default=False, @@ -323,6 +341,11 @@ def parseOpts(overrideArguments=None): return parser, opts, args def _real_main(argv=None): + # Compatibility fixes for Windows + if sys.platform == 'win32': + # https://github.com/rg3/youtube-dl/issues/820 + codecs.register(lambda name: codecs.lookup('utf-8') if name == 'cp65001' else None) + parser, opts, args = parseOpts(argv) # Open appropriate CookieJar @@ -341,6 +364,10 @@ def _real_main(argv=None): # Set user agent if opts.user_agent is not None: std_headers['User-Agent'] = opts.user_agent + + # Set referer + if opts.referer is not None: + std_headers['Referer'] = opts.referer # Dump user agent if opts.dump_user_agent: @@ -365,8 +392,16 @@ def _real_main(argv=None): # General configuration cookie_processor = compat_urllib_request.HTTPCookieProcessor(jar) - proxy_handler = compat_urllib_request.ProxyHandler() - opener = compat_urllib_request.build_opener(proxy_handler, cookie_processor, YoutubeDLHandler()) + if opts.proxy: + proxies = {'http': opts.proxy, 'https': opts.proxy} + else: + proxies = compat_urllib_request.getproxies() + # Set HTTPS proxy to HTTP one if given (https://github.com/rg3/youtube-dl/issues/805) + if 'http' in proxies and 'https' not in proxies: + proxies['https'] = proxies['http'] + proxy_handler = compat_urllib_request.ProxyHandler(proxies) + https_handler = make_HTTPS_handler(opts) + opener = compat_urllib_request.build_opener(https_handler, proxy_handler, cookie_processor, YoutubeDLHandler()) compat_urllib_request.install_opener(opener) socket.setdefaulttimeout(300) # 5 minutes should be enough (famous last words) @@ -439,6 +474,10 @@ def _real_main(argv=None): if opts.recodevideo is not None: if opts.recodevideo not in ['mp4', 'flv', 'webm', 'ogg']: parser.error(u'invalid video recode format specified') + if opts.date is not None: + date = DateRange.day(opts.date) + else: + date = DateRange(opts.dateafter, opts.datebefore) if sys.version_info < (3,): # In Python 2, sys.argv is a bytestring (also note http://bugs.python.org/issue2128 for Windows systems) @@ -451,22 +490,23 @@ def _real_main(argv=None): or (opts.usetitle and u'%(title)s-%(id)s.%(ext)s') or (opts.useid and u'%(id)s.%(ext)s') or (opts.autonumber and u'%(autonumber)s-%(id)s.%(ext)s') - or u'%(id)s.%(ext)s') + or u'%(title)s-%(id)s.%(ext)s') # File downloader fd = FileDownloader({ 'usenetrc': opts.usenetrc, 'username': opts.username, 'password': opts.password, - 'quiet': (opts.quiet or opts.geturl or opts.gettitle or opts.getthumbnail or opts.getdescription or opts.getfilename or opts.getformat), + 'quiet': (opts.quiet or opts.geturl or opts.gettitle or opts.getid or opts.getthumbnail or opts.getdescription or opts.getfilename or opts.getformat), 'forceurl': opts.geturl, 'forcetitle': opts.gettitle, + 'forceid': opts.getid, 'forcethumbnail': opts.getthumbnail, 'forcedescription': opts.getdescription, 'forcefilename': opts.getfilename, 'forceformat': opts.getformat, 'simulate': opts.simulate, - 'skip_download': (opts.skip_download or opts.simulate or opts.geturl or opts.gettitle or opts.getthumbnail or opts.getdescription or opts.getfilename or opts.getformat), + 'skip_download': (opts.skip_download or opts.simulate or opts.geturl or opts.gettitle or opts.getid or opts.getthumbnail or opts.getdescription or opts.getfilename or opts.getformat), 'format': opts.format, 'format_limit': opts.format_limit, 'listformats': opts.listformats, @@ -490,6 +530,7 @@ def _real_main(argv=None): 'updatetime': opts.updatetime, 'writedescription': opts.writedescription, 'writeinfojson': opts.writeinfojson, + 'writethumbnail': opts.writethumbnail, 'writesubtitles': opts.writesubtitles, 'onlysubtitles': opts.onlysubtitles, 'allsubtitles': opts.allsubtitles, @@ -505,7 +546,8 @@ def _real_main(argv=None): 'test': opts.test, 'keepvideo': opts.keepvideo, 'min_filesize': opts.min_filesize, - 'max_filesize': opts.max_filesize + 'max_filesize': opts.max_filesize, + 'daterange': date, }) if opts.verbose: