mirror of
https://github.com/l1ving/youtube-dl
synced 2024-12-30 22:03:00 +08:00
release 2012.02.26
This commit is contained in:
parent
871dbd3c92
commit
c4105fa035
@ -1 +1 @@
|
|||||||
2012.01.08b
|
2012.02.26
|
||||||
|
@ -12,7 +12,7 @@ which means you can modify it, redistribute it or use it however you like.
|
|||||||
|
|
||||||
## OPTIONS
|
## OPTIONS
|
||||||
-h, --help print this help text and exit
|
-h, --help print this help text and exit
|
||||||
-v, --version print program version and exit
|
--version print program version and exit
|
||||||
-U, --update update this program to latest version
|
-U, --update update this program to latest version
|
||||||
-i, --ignore-errors continue on download errors
|
-i, --ignore-errors continue on download errors
|
||||||
-r, --rate-limit LIMIT download rate limit (e.g. 50k or 44.6m)
|
-r, --rate-limit LIMIT download rate limit (e.g. 50k or 44.6m)
|
||||||
@ -66,6 +66,7 @@ which means you can modify it, redistribute it or use it however you like.
|
|||||||
--get-format simulate, quiet but print output format
|
--get-format simulate, quiet but print output format
|
||||||
--no-progress do not print progress bar
|
--no-progress do not print progress bar
|
||||||
--console-title display progress in console titlebar
|
--console-title display progress in console titlebar
|
||||||
|
-v, --verbose print various debugging information
|
||||||
|
|
||||||
### Video Format Options:
|
### Video Format Options:
|
||||||
-f, --format FORMAT video format code
|
-f, --format FORMAT video format code
|
||||||
|
43
youtube-dl
43
youtube-dl
@ -18,12 +18,14 @@ __authors__ = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
__license__ = 'Public Domain'
|
__license__ = 'Public Domain'
|
||||||
__version__ = '2012.01.08b'
|
__version__ = '2012.02.26'
|
||||||
|
|
||||||
UPDATE_URL = 'https://raw.github.com/rg3/youtube-dl/master/youtube-dl'
|
UPDATE_URL = 'https://raw.github.com/rg3/youtube-dl/master/youtube-dl'
|
||||||
|
|
||||||
|
|
||||||
import cookielib
|
import cookielib
|
||||||
import datetime
|
import datetime
|
||||||
|
import getpass
|
||||||
import gzip
|
import gzip
|
||||||
import htmlentitydefs
|
import htmlentitydefs
|
||||||
import HTMLParser
|
import HTMLParser
|
||||||
@ -31,9 +33,11 @@ import httplib
|
|||||||
import locale
|
import locale
|
||||||
import math
|
import math
|
||||||
import netrc
|
import netrc
|
||||||
|
import optparse
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
import re
|
import re
|
||||||
|
import shlex
|
||||||
import socket
|
import socket
|
||||||
import string
|
import string
|
||||||
import subprocess
|
import subprocess
|
||||||
@ -305,7 +309,14 @@ def _encodeFilename(s):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
assert type(s) == type(u'')
|
assert type(s) == type(u'')
|
||||||
return s.encode(sys.getfilesystemencoding(), 'ignore')
|
|
||||||
|
if sys.platform == 'win32' and sys.getwindowsversion().major >= 5:
|
||||||
|
# Pass u'' directly to use Unicode APIs on Windows 2000 and up
|
||||||
|
# (Detecting Windows NT 4 is tricky because 'major >= 4' would
|
||||||
|
# match Windows 9x series as well. Besides, NT 4 is obsolete.)
|
||||||
|
return s
|
||||||
|
else:
|
||||||
|
return s.encode(sys.getfilesystemencoding(), 'ignore')
|
||||||
|
|
||||||
class DownloadError(Exception):
|
class DownloadError(Exception):
|
||||||
"""Download Error exception.
|
"""Download Error exception.
|
||||||
@ -889,7 +900,15 @@ class FileDownloader(object):
|
|||||||
# the connection was interrumpted and resuming appears to be
|
# the connection was interrumpted and resuming appears to be
|
||||||
# possible. This is part of rtmpdump's normal usage, AFAIK.
|
# possible. This is part of rtmpdump's normal usage, AFAIK.
|
||||||
basic_args = ['rtmpdump', '-q'] + [[], ['-W', player_url]][player_url is not None] + ['-r', url, '-o', tmpfilename]
|
basic_args = ['rtmpdump', '-q'] + [[], ['-W', player_url]][player_url is not None] + ['-r', url, '-o', tmpfilename]
|
||||||
retval = subprocess.call(basic_args + [[], ['-e', '-k', '1']][self.params.get('continuedl', False)])
|
args = basic_args + [[], ['-e', '-k', '1']][self.params.get('continuedl', False)]
|
||||||
|
if self.params['verbose']:
|
||||||
|
try:
|
||||||
|
import pipes
|
||||||
|
shell_quote = lambda args: ' '.join(map(pipes.quote, args))
|
||||||
|
except ImportError:
|
||||||
|
shell_quote = repr
|
||||||
|
self.to_screen(u'[debug] rtmpdump command line: ' + shell_quote(args))
|
||||||
|
retval = subprocess.call(args)
|
||||||
while retval == 2 or retval == 1:
|
while retval == 2 or retval == 1:
|
||||||
prevsize = os.path.getsize(_encodeFilename(tmpfilename))
|
prevsize = os.path.getsize(_encodeFilename(tmpfilename))
|
||||||
self.to_screen(u'\r[rtmpdump] %s bytes' % prevsize, skip_eol=True)
|
self.to_screen(u'\r[rtmpdump] %s bytes' % prevsize, skip_eol=True)
|
||||||
@ -2014,7 +2033,7 @@ class VimeoIE(InfoExtractor):
|
|||||||
"""Information extractor for vimeo.com."""
|
"""Information extractor for vimeo.com."""
|
||||||
|
|
||||||
# _VALID_URL matches Vimeo URLs
|
# _VALID_URL matches Vimeo URLs
|
||||||
_VALID_URL = r'(?:https?://)?(?:(?:www|player).)?vimeo\.com/(?:groups/[^/]+/)?(?:videos?/)?(?:moogaloop.swf\?clip_id=)?([0-9]+)'
|
_VALID_URL = r'(?:https?://)?(?:(?:www|player).)?vimeo\.com/(?:groups/[^/]+/)?(?:videos?/)?([0-9]+)'
|
||||||
IE_NAME = u'vimeo'
|
IE_NAME = u'vimeo'
|
||||||
|
|
||||||
def __init__(self, downloader=None):
|
def __init__(self, downloader=None):
|
||||||
@ -4198,11 +4217,6 @@ def updateSelf(downloader, filename):
|
|||||||
downloader.to_screen(u'Updated youtube-dl. Restart youtube-dl to use the new version.')
|
downloader.to_screen(u'Updated youtube-dl. Restart youtube-dl to use the new version.')
|
||||||
|
|
||||||
def parseOpts():
|
def parseOpts():
|
||||||
# Deferred imports
|
|
||||||
import getpass
|
|
||||||
import optparse
|
|
||||||
import shlex
|
|
||||||
|
|
||||||
def _readOptions(filename_bytes):
|
def _readOptions(filename_bytes):
|
||||||
try:
|
try:
|
||||||
optionf = open(filename_bytes)
|
optionf = open(filename_bytes)
|
||||||
@ -4344,6 +4358,8 @@ def parseOpts():
|
|||||||
verbosity.add_option('--console-title',
|
verbosity.add_option('--console-title',
|
||||||
action='store_true', dest='consoletitle',
|
action='store_true', dest='consoletitle',
|
||||||
help='display progress in console titlebar', default=False)
|
help='display progress in console titlebar', default=False)
|
||||||
|
verbosity.add_option('-v', '--verbose',
|
||||||
|
action='store_true', dest='verbose', help='print various debugging information', default=False)
|
||||||
|
|
||||||
|
|
||||||
filesystem.add_option('-t', '--title',
|
filesystem.add_option('-t', '--title',
|
||||||
@ -4360,7 +4376,7 @@ def parseOpts():
|
|||||||
filesystem.add_option('-w', '--no-overwrites',
|
filesystem.add_option('-w', '--no-overwrites',
|
||||||
action='store_true', dest='nooverwrites', help='do not overwrite files', default=False)
|
action='store_true', dest='nooverwrites', help='do not overwrite files', default=False)
|
||||||
filesystem.add_option('-c', '--continue',
|
filesystem.add_option('-c', '--continue',
|
||||||
action='store_true', dest='continue_dl', help='resume partially downloaded files', default=False)
|
action='store_true', dest='continue_dl', help='resume partially downloaded files', default=True)
|
||||||
filesystem.add_option('--no-continue',
|
filesystem.add_option('--no-continue',
|
||||||
action='store_false', dest='continue_dl',
|
action='store_false', dest='continue_dl',
|
||||||
help='do not resume partially downloaded files (restart from beginning)')
|
help='do not resume partially downloaded files (restart from beginning)')
|
||||||
@ -4480,10 +4496,14 @@ def _real_main():
|
|||||||
|
|
||||||
# General configuration
|
# General configuration
|
||||||
cookie_processor = urllib2.HTTPCookieProcessor(jar)
|
cookie_processor = urllib2.HTTPCookieProcessor(jar)
|
||||||
opener = urllib2.build_opener(urllib2.ProxyHandler(), cookie_processor, YoutubeDLHandler())
|
proxy_handler = urllib2.ProxyHandler()
|
||||||
|
opener = urllib2.build_opener(proxy_handler, cookie_processor, YoutubeDLHandler())
|
||||||
urllib2.install_opener(opener)
|
urllib2.install_opener(opener)
|
||||||
socket.setdefaulttimeout(300) # 5 minutes should be enough (famous last words)
|
socket.setdefaulttimeout(300) # 5 minutes should be enough (famous last words)
|
||||||
|
|
||||||
|
if opts.verbose:
|
||||||
|
print(u'[debug] Proxy map: ' + str(proxy_handler.proxies))
|
||||||
|
|
||||||
extractors = gen_extractors()
|
extractors = gen_extractors()
|
||||||
|
|
||||||
if opts.list_extractors:
|
if opts.list_extractors:
|
||||||
@ -4577,6 +4597,7 @@ def _real_main():
|
|||||||
'rejecttitle': opts.rejecttitle,
|
'rejecttitle': opts.rejecttitle,
|
||||||
'max_downloads': opts.max_downloads,
|
'max_downloads': opts.max_downloads,
|
||||||
'prefer_free_formats': opts.prefer_free_formats,
|
'prefer_free_formats': opts.prefer_free_formats,
|
||||||
|
'verbose': opts.verbose,
|
||||||
})
|
})
|
||||||
for extractor in extractors:
|
for extractor in extractors:
|
||||||
fd.add_info_extractor(extractor)
|
fd.add_info_extractor(extractor)
|
||||||
|
@ -18,7 +18,7 @@ __authors__ = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
__license__ = 'Public Domain'
|
__license__ = 'Public Domain'
|
||||||
__version__ = '2012.01.25'
|
__version__ = '2012.02.26'
|
||||||
|
|
||||||
UPDATE_URL = 'https://raw.github.com/rg3/youtube-dl/master/youtube-dl'
|
UPDATE_URL = 'https://raw.github.com/rg3/youtube-dl/master/youtube-dl'
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user