about summary refs log tree commit diff
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.gz
youtube-dl-80066952bc9f83e3974d2b01d58ba61541238a2b.tar.xz
youtube-dl-80066952bc9f83e3974d2b01d58ba61541238a2b.zip
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: