about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAnand Babu Periasamy <ab@unlocksmith.org>2011-07-23 00:51:06 -0700
committerPhilipp Hagemeister <phihag@phihag.de>2011-09-14 22:54:51 +0200
commit20e91e837530ea01a2e601bf162bfc4468db875a (patch)
tree73d3961b4415c6b5860572340853908327f9da00
parentf9c68787146e6278df0f29d0d4e2f0d4199f49b0 (diff)
downloadyoutube-dl-20e91e837530ea01a2e601bf162bfc4468db875a.tar.gz
youtube-dl-20e91e837530ea01a2e601bf162bfc4468db875a.tar.xz
youtube-dl-20e91e837530ea01a2e601bf162bfc4468db875a.zip
Add --match-title and --reject-title (Closes #132)
-rwxr-xr-xyoutube-dl28
1 files changed, 24 insertions, 4 deletions
diff --git a/youtube-dl b/youtube-dl
index 719edeb9b..0973cc4ad 100755
--- a/youtube-dl
+++ b/youtube-dl
@@ -438,6 +438,8 @@ class FileDownloader(object):
 	noprogress:       Do not print the progress bar.
 	playliststart:    Playlist item to start at.
 	playlistend:      Playlist item to end at.
+	matchtitle:       Download only matching titles.
+	rejecttitle:      Reject downloads for matching titles.
 	logtostderr:      Log messages to stderr instead of stdout.
 	consoletitle:     Display progress in console window's titlebar.
 	nopart:           Do not use temporary .part files.
@@ -713,6 +715,17 @@ class FileDownloader(object):
 
 		if filename is None:
 			return
+
+		matchtitle=self.params.get('matchtitle',False)
+		rejecttitle=self.params.get('rejecttitle',False)
+		title=info_dict['title'].encode(preferredencoding(), 'xmlcharrefreplace')
+		if matchtitle and not re.search(matchtitle, title, re.IGNORECASE):
+			self.to_screen(u'[download] "%s" title did not match pattern "%s"' % (title, matchtitle))
+			return
+		if rejecttitle and re.search(rejecttitle, title, re.IGNORECASE):
+			self.to_screen(u'[download] "%s" title matched reject pattern "%s"' % (title, rejecttitle))
+			return
+			
 		if self.params.get('nooverwrites', False) and os.path.exists(filename):
 			self.to_stderr(u'WARNING: file exists and will be skipped')
 			return
@@ -3487,6 +3500,7 @@ def parseOpts():
 
 	# option groups
 	general        = optparse.OptionGroup(parser, 'General Options')
+	selection      = optparse.OptionGroup(parser, 'Video Selection')
 	authentication = optparse.OptionGroup(parser, 'Authentication Options')
 	video_format   = optparse.OptionGroup(parser, 'Video Format Options')
 	postproc       = optparse.OptionGroup(parser, 'Post-processing Options')
@@ -3505,14 +3519,17 @@ def parseOpts():
 			dest='ratelimit', metavar='LIMIT', help='download rate limit (e.g. 50k or 44.6m)')
 	general.add_option('-R', '--retries',
 			dest='retries', metavar='RETRIES', help='number of retries (default is 10)', default=10)
-	general.add_option('--playlist-start',
-			dest='playliststart', metavar='NUMBER', help='playlist video to start at (default is 1)', default=1)
-	general.add_option('--playlist-end',
-			dest='playlistend', metavar='NUMBER', help='playlist video to end at (default is last)', default=-1)
 	general.add_option('--dump-user-agent',
 			action='store_true', dest='dump_user_agent',
 			help='display the current browser identification', default=False)
 
+	selection.add_option('--playlist-start',
+			dest='playliststart', metavar='NUMBER', help='playlist video to start at (default is 1)', default=1)
+	selection.add_option('--playlist-end',
+			dest='playlistend', metavar='NUMBER', help='playlist video to end at (default is last)', default=-1)
+	selection.add_option('--match-title', dest='matchtitle', metavar='REGEX',help='download only matching titles (regex or caseless sub-string)')
+	selection.add_option('--reject-title', dest='rejecttitle', metavar='REGEX',help='skip download for matching titles (regex or caseless sub-string)')
+
 	authentication.add_option('-u', '--username',
 			dest='username', metavar='USERNAME', help='account username')
 	authentication.add_option('-p', '--password',
@@ -3590,6 +3607,7 @@ def parseOpts():
 
 
 	parser.add_option_group(general)
+	parser.add_option_group(selection)
 	parser.add_option_group(filesystem)
 	parser.add_option_group(verbosity)
 	parser.add_option_group(video_format)
@@ -3742,6 +3760,8 @@ def main():
 		'updatetime': opts.updatetime,
 		'writedescription': opts.writedescription,
 		'writeinfojson': opts.writeinfojson,
+		'matchtitle': opts.matchtitle,
+		'rejecttitle': opts.rejecttitle,
 		})
 	for extractor in extractors:
 		fd.add_info_extractor(extractor)