diff options
| -rwxr-xr-x | youtube-dl | 37 | 
1 files changed, 23 insertions, 14 deletions
| diff --git a/youtube-dl b/youtube-dl index f445c4de6..b099ffd15 100755 --- a/youtube-dl +++ b/youtube-dl @@ -204,6 +204,7 @@ class FileDownloader(object):  	continuedl:       Try to continue downloads if possible.  	noprogress:       Do not print the progress bar.  	playliststart:    Playlist item to start at. +	playlistend:      Playlist item to end at.  	logtostderr:      Log messages to stderr instead of stdout.  	""" @@ -1966,11 +1967,10 @@ class YoutubePlaylistIE(InfoExtractor):  				break  			pagenum = pagenum + 1 -		playliststart = self._downloader.params.get('playliststart', 1) -		playliststart -= 1 #our arrays are zero-based but the playlist is 1-based -		if playliststart > 0: -			video_ids = video_ids[playliststart:] -			 +		playliststart = self._downloader.params.get('playliststart', 1) - 1 +		playlistend = self._downloader.params.get('playlistend', -1) +		video_ids = video_ids[playliststart:playlistend] +  		for id in video_ids:  			self._youtube_ie.extract('http://www.youtube.com/watch?v=%s' % id)  		return @@ -2026,10 +2026,9 @@ class YoutubeUserIE(InfoExtractor):  				ids_in_page.append(mobj.group(1))  		video_ids.extend(ids_in_page) -		playliststart = self._downloader.params.get('playliststart', 1) -		playliststart = playliststart-1 #our arrays are zero-based but the playlist is 1-based -		if playliststart > 0: -			video_ids = video_ids[playliststart:]	 +		playliststart = self._downloader.params.get('playliststart', 1) - 1 +		playlistend = self._downloader.params.get('playlistend', -1) +		video_ids = video_ids[playliststart:playlistend]  		for id in video_ids:  			self._youtube_ie.extract('http://www.youtube.com/watch?v=%s' % id) @@ -2125,6 +2124,8 @@ if __name__ == '__main__':  				dest='retries', metavar='RETRIES', help='number of retries (default is 10)', default=10)  		parser.add_option('--playlist-start',  				dest='playliststart', metavar='NUMBER', help='playlist video to start at (default is 1)', default=1) +		parser.add_option('--playlist-end', +				dest='playlistend', metavar='NUMBER', help='playlist video to end at (default is last)', default=-1)  		authentication = optparse.OptionGroup(parser, 'Authentication Options')  		authentication.add_option('-u', '--username', @@ -2239,11 +2240,18 @@ if __name__ == '__main__':  				opts.retries = long(opts.retries)  			except (TypeError, ValueError), err:  				parser.error(u'invalid retry count specified') -		if opts.playliststart is not None: -			try: -				opts.playliststart = long(opts.playliststart) -			except (TypeError, ValueError), err: -				parser.error(u'invalid playlist page specified') +		try: +			opts.playliststart = long(opts.playliststart) +			if opts.playliststart <= 0: +				raise ValueError +		except (TypeError, ValueError), err: +			parser.error(u'invalid playlist start number specified') +		try: +			opts.playlistend = long(opts.playlistend) +			if opts.playlistend != -1 and (opts.playlistend <= 0 or opts.playlistend < opts.playliststart): +				raise ValueError +		except (TypeError, ValueError), err: +			parser.error(u'invalid playlist end number specified')  		# Information extractors  		youtube_ie = YoutubeIE() @@ -2286,6 +2294,7 @@ if __name__ == '__main__':  			'continuedl': opts.continue_dl,  			'noprogress': opts.noprogress,  			'playliststart': opts.playliststart, +			'playlistend': opts.playlistend,  			'logtostderr': opts.outtmpl == '-',  			})  		fd.add_info_extractor(youtube_search_ie) | 
