aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicardo Garcia <sarbalap+freshmeat@gmail.com>2010-10-23 12:54:00 +0200
committerRicardo Garcia <sarbalap+freshmeat@gmail.com>2010-10-31 11:28:45 +0100
commit80066952bc9f83e3974d2b01d58ba61541238a2b (patch)
tree0ec942dbdf713bfd301bfacb250fd6d26a2f0f4d
parente08878f498c69567b213d781da02187869285a5f (diff)
downloadyoutube-dl-80066952bc9f83e3974d2b01d58ba61541238a2b.tar.xz
Add new --cookies option to be able to save cookies to disk (fixes issue #208)
-rwxr-xr-xyoutube-dl66
1 files changed, 45 insertions, 21 deletions
diff --git a/youtube-dl b/youtube-dl
index 8494be96c..26cdc6ef2 100755
--- a/youtube-dl
+++ b/youtube-dl
@@ -4,6 +4,7 @@
# Author: Danny Colligan
# Author: Benjamin Johnson
# License: Public domain code
+import cookielib
import htmlentitydefs
import httplib
import locale
@@ -184,22 +185,25 @@ class FileDownloader(object):
Available options:
- username: Username for authentication purposes.
- password: Password for authentication purposes.
- usenetrc: Use netrc for authentication instead.
- quiet: Do not print messages to stdout.
- forceurl: Force printing final URL.
- forcetitle: Force printing title.
- simulate: Do not download the video files.
- format: Video format code.
- format_limit: Highest quality format to try.
- outtmpl: Template for output names.
- ignoreerrors: Do not stop on download errors.
- ratelimit: Download speed limit, in bytes/sec.
- nooverwrites: Prevent overwriting files.
- retries: Number of times to retry for HTTP error 5xx
- continuedl: Try to continue downloads if possible.
- noprogress: Do not print the progress bar.
+ username: Username for authentication purposes.
+ password: Password for authentication purposes.
+ usenetrc: Use netrc for authentication instead.
+ quiet: Do not print messages to stdout.
+ forceurl: Force printing final URL.
+ forcetitle: Force printing title.
+ forcethumbnail: Force printing thumbnail URL.
+ forcedescription: Force printing description.
+ simulate: Do not download the video files.
+ format: Video format code.
+ format_limit: Highest quality format to try.
+ outtmpl: Template for output names.
+ ignoreerrors: Do not stop on download errors.
+ ratelimit: Download speed limit, in bytes/sec.
+ nooverwrites: Prevent overwriting files.
+ retries: Number of times to retry for HTTP error 5xx
+ continuedl: Try to continue downloads if possible.
+ noprogress: Do not print the progress bar.
+ playliststart: Playlist item to start at.
"""
params = None
@@ -2096,11 +2100,6 @@ if __name__ == '__main__':
stream.close()
downloader.to_stdout('Updated to version %s' % latest_version)
- # General configuration
- urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler()))
- urllib2.install_opener(urllib2.build_opener(urllib2.HTTPCookieProcessor()))
- socket.setdefaulttimeout(300) # 5 minutes should be enough (famous last words)
-
# Parse command line
parser = optparse.OptionParser(
usage='Usage: %prog [options] url...',
@@ -2175,10 +2174,27 @@ if __name__ == '__main__':
action='store_true', dest='nooverwrites', help='do not overwrite files', default=False)
filesystem.add_option('-c', '--continue',
action='store_true', dest='continue_dl', help='resume partially downloaded files', default=False)
+ filesystem.add_option('--cookies',
+ dest='cookiefile', metavar='FILE', help='file to dump cookie jar to')
parser.add_option_group(filesystem)
(opts, args) = parser.parse_args()
+ # Open appropriate CookieJar
+ if opts.cookiefile is None:
+ jar = cookielib.CookieJar()
+ else:
+ try:
+ jar = cookielib.MozillaCookieJar(opts.cookiefile)
+ except (IOError, OSError), err:
+ sys.exit(u'ERROR: unable to open cookie file')
+
+ # General configuration
+ cookie_processor = urllib2.HTTPCookieProcessor(jar)
+ urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler()))
+ urllib2.install_opener(urllib2.build_opener(cookie_processor))
+ socket.setdefaulttimeout(300) # 5 minutes should be enough (famous last words)
+
# Batch file verification
batchurls = []
if opts.batchfile is not None:
@@ -2292,6 +2308,14 @@ if __name__ == '__main__':
else:
sys.exit()
retcode = fd.download(all_urls)
+
+ # Dump cookie jar if requested
+ if opts.cookiefile is not None:
+ try:
+ jar.save()
+ except (IOError, OSError), err:
+ sys.exit(u'ERROR: unable to save cookie jar')
+
sys.exit(retcode)
except DownloadError: