mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00:00 
			
		
		
		
	Add infrastructure for paged lists
This commit allows to download pages in playlists as needed instead of all at once.
Before this commit,
    youtube-dl http://www.youtube.com/user/ANNnewsCH/videos --playlist-end 2 --skip-download
took quite some time - now it's almost instantaneous.
As an example, the youtube:user extractor has been converted.
Fixes #2175
			
			
This commit is contained in:
		| @@ -39,6 +39,7 @@ from .utils import ( | ||||
|     locked_file, | ||||
|     make_HTTPS_handler, | ||||
|     MaxDownloadsReached, | ||||
|     PagedList, | ||||
|     PostProcessingError, | ||||
|     platform_name, | ||||
|     preferredencoding, | ||||
| @@ -575,19 +576,27 @@ class YoutubeDL(object): | ||||
|  | ||||
|             playlist_results = [] | ||||
|  | ||||
|             n_all_entries = len(ie_result['entries']) | ||||
|             playliststart = self.params.get('playliststart', 1) - 1 | ||||
|             playlistend = self.params.get('playlistend', None) | ||||
|             # For backwards compatibility, interpret -1 as whole list | ||||
|             if playlistend == -1: | ||||
|                 playlistend = None | ||||
|  | ||||
|             entries = ie_result['entries'][playliststart:playlistend] | ||||
|             n_entries = len(entries) | ||||
|  | ||||
|             self.to_screen( | ||||
|                 "[%s] playlist '%s': Collected %d video ids (downloading %d of them)" % | ||||
|                 (ie_result['extractor'], playlist, n_all_entries, n_entries)) | ||||
|             if isinstance(ie_result['entries'], list): | ||||
|                 n_all_entries = len(ie_result['entries']) | ||||
|                 entries = ie_result['entries'][playliststart:playlistend] | ||||
|                 n_entries = len(entries) | ||||
|                 self.to_screen( | ||||
|                     "[%s] playlist %s: Collected %d video ids (downloading %d of them)" % | ||||
|                     (ie_result['extractor'], playlist, n_all_entries, n_entries)) | ||||
|             else: | ||||
|                 assert isinstance(ie_result['entries'], PagedList) | ||||
|                 entries = ie_result['entries'].getslice( | ||||
|                     playliststart, playlistend) | ||||
|                 n_entries = len(entries) | ||||
|                 self.to_screen( | ||||
|                     "[%s] playlist %s: Downloading %d videos" % | ||||
|                     (ie_result['extractor'], playlist, n_entries)) | ||||
|  | ||||
|             for i, entry in enumerate(entries, 1): | ||||
|                 self.to_screen('[download] Downloading video #%s of %s' % (i, n_entries)) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister