mirror of
				https://github.com/ytdl-org/youtube-dl
				synced 2025-11-04 03:33:46 +00:00 
			
		
		
		
	[YoutubeDL] Honour all --get-* options with --flat-playlist (closes #22493)
This commit is contained in:
		
							parent
							
								
									8e9fdcbe27
								
							
						
					
					
						commit
						d06daf23da
					
				@ -852,8 +852,9 @@ class YoutubeDL(object):
 | 
				
			|||||||
            extract_flat = self.params.get('extract_flat', False)
 | 
					            extract_flat = self.params.get('extract_flat', False)
 | 
				
			||||||
            if ((extract_flat == 'in_playlist' and 'playlist' in extra_info)
 | 
					            if ((extract_flat == 'in_playlist' and 'playlist' in extra_info)
 | 
				
			||||||
                    or extract_flat is True):
 | 
					                    or extract_flat is True):
 | 
				
			||||||
                if self.params.get('forcejson', False):
 | 
					                self.__forced_printings(
 | 
				
			||||||
                    self.to_stdout(json.dumps(ie_result))
 | 
					                    ie_result, self.prepare_filename(ie_result),
 | 
				
			||||||
 | 
					                    incomplete=True)
 | 
				
			||||||
                return ie_result
 | 
					                return ie_result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if result_type == 'video':
 | 
					        if result_type == 'video':
 | 
				
			||||||
@ -1693,6 +1694,36 @@ class YoutubeDL(object):
 | 
				
			|||||||
            subs[lang] = f
 | 
					            subs[lang] = f
 | 
				
			||||||
        return subs
 | 
					        return subs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __forced_printings(self, info_dict, filename, incomplete):
 | 
				
			||||||
 | 
					        def print_mandatory(field):
 | 
				
			||||||
 | 
					            if (self.params.get('force%s' % field, False)
 | 
				
			||||||
 | 
					                    and (not incomplete or info_dict.get(field) is not None)):
 | 
				
			||||||
 | 
					                self.to_stdout(info_dict[field])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        def print_optional(field):
 | 
				
			||||||
 | 
					            if (self.params.get('force%s' % field, False)
 | 
				
			||||||
 | 
					                    and info_dict.get(field) is not None):
 | 
				
			||||||
 | 
					                self.to_stdout(info_dict[field])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        print_mandatory('title')
 | 
				
			||||||
 | 
					        print_mandatory('id')
 | 
				
			||||||
 | 
					        if self.params.get('forceurl', False) and not incomplete:
 | 
				
			||||||
 | 
					            if info_dict.get('requested_formats') is not None:
 | 
				
			||||||
 | 
					                for f in info_dict['requested_formats']:
 | 
				
			||||||
 | 
					                    self.to_stdout(f['url'] + f.get('play_path', ''))
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                # For RTMP URLs, also include the playpath
 | 
				
			||||||
 | 
					                self.to_stdout(info_dict['url'] + info_dict.get('play_path', ''))
 | 
				
			||||||
 | 
					        print_optional('thumbnail')
 | 
				
			||||||
 | 
					        print_optional('description')
 | 
				
			||||||
 | 
					        if self.params.get('forcefilename', False) and filename is not None:
 | 
				
			||||||
 | 
					            self.to_stdout(filename)
 | 
				
			||||||
 | 
					        if self.params.get('forceduration', False) and info_dict.get('duration') is not None:
 | 
				
			||||||
 | 
					            self.to_stdout(formatSeconds(info_dict['duration']))
 | 
				
			||||||
 | 
					        print_mandatory('format')
 | 
				
			||||||
 | 
					        if self.params.get('forcejson', False):
 | 
				
			||||||
 | 
					            self.to_stdout(json.dumps(info_dict))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def process_info(self, info_dict):
 | 
					    def process_info(self, info_dict):
 | 
				
			||||||
        """Process a single resolved IE result."""
 | 
					        """Process a single resolved IE result."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1703,9 +1734,8 @@ class YoutubeDL(object):
 | 
				
			|||||||
            if self._num_downloads >= int(max_downloads):
 | 
					            if self._num_downloads >= int(max_downloads):
 | 
				
			||||||
                raise MaxDownloadsReached()
 | 
					                raise MaxDownloadsReached()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # TODO: backward compatibility, to be removed
 | 
				
			||||||
        info_dict['fulltitle'] = info_dict['title']
 | 
					        info_dict['fulltitle'] = info_dict['title']
 | 
				
			||||||
        if len(info_dict['title']) > 200:
 | 
					 | 
				
			||||||
            info_dict['title'] = info_dict['title'][:197] + '...'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if 'format' not in info_dict:
 | 
					        if 'format' not in info_dict:
 | 
				
			||||||
            info_dict['format'] = info_dict['ext']
 | 
					            info_dict['format'] = info_dict['ext']
 | 
				
			||||||
@ -1720,29 +1750,7 @@ class YoutubeDL(object):
 | 
				
			|||||||
        info_dict['_filename'] = filename = self.prepare_filename(info_dict)
 | 
					        info_dict['_filename'] = filename = self.prepare_filename(info_dict)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Forced printings
 | 
					        # Forced printings
 | 
				
			||||||
        if self.params.get('forcetitle', False):
 | 
					        self.__forced_printings(info_dict, filename, incomplete=False)
 | 
				
			||||||
            self.to_stdout(info_dict['fulltitle'])
 | 
					 | 
				
			||||||
        if self.params.get('forceid', False):
 | 
					 | 
				
			||||||
            self.to_stdout(info_dict['id'])
 | 
					 | 
				
			||||||
        if self.params.get('forceurl', False):
 | 
					 | 
				
			||||||
            if info_dict.get('requested_formats') is not None:
 | 
					 | 
				
			||||||
                for f in info_dict['requested_formats']:
 | 
					 | 
				
			||||||
                    self.to_stdout(f['url'] + f.get('play_path', ''))
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                # For RTMP URLs, also include the playpath
 | 
					 | 
				
			||||||
                self.to_stdout(info_dict['url'] + info_dict.get('play_path', ''))
 | 
					 | 
				
			||||||
        if self.params.get('forcethumbnail', False) and info_dict.get('thumbnail') is not None:
 | 
					 | 
				
			||||||
            self.to_stdout(info_dict['thumbnail'])
 | 
					 | 
				
			||||||
        if self.params.get('forcedescription', False) and info_dict.get('description') is not None:
 | 
					 | 
				
			||||||
            self.to_stdout(info_dict['description'])
 | 
					 | 
				
			||||||
        if self.params.get('forcefilename', False) and filename is not None:
 | 
					 | 
				
			||||||
            self.to_stdout(filename)
 | 
					 | 
				
			||||||
        if self.params.get('forceduration', False) and info_dict.get('duration') is not None:
 | 
					 | 
				
			||||||
            self.to_stdout(formatSeconds(info_dict['duration']))
 | 
					 | 
				
			||||||
        if self.params.get('forceformat', False):
 | 
					 | 
				
			||||||
            self.to_stdout(info_dict['format'])
 | 
					 | 
				
			||||||
        if self.params.get('forcejson', False):
 | 
					 | 
				
			||||||
            self.to_stdout(json.dumps(info_dict))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Do nothing else if in simulate mode
 | 
					        # Do nothing else if in simulate mode
 | 
				
			||||||
        if self.params.get('simulate', False):
 | 
					        if self.params.get('simulate', False):
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user