diff options
| author | Anand Babu Periasamy <ab@unlocksmith.org> | 2011-07-23 00:51:06 -0700 | 
|---|---|---|
| committer | Philipp Hagemeister <phihag@phihag.de> | 2011-09-14 22:54:51 +0200 | 
| commit | 20e91e837530ea01a2e601bf162bfc4468db875a (patch) | |
| tree | 73d3961b4415c6b5860572340853908327f9da00 | |
| parent | f9c68787146e6278df0f29d0d4e2f0d4199f49b0 (diff) | |
Add --match-title and --reject-title (Closes #132)
| -rwxr-xr-x | youtube-dl | 28 | 
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)  | 
