diff options
| author | Sergey M․ <dstftw@gmail.com> | 2019-09-25 02:08:46 +0700 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2019-09-25 02:10:37 +0700 | 
| commit | d06daf23dae24b0811be704283b4b63689035af3 (patch) | |
| tree | a74bb0dbea94e28bd730bced6ddccd6ac326dc8c | |
| parent | 8e9fdcbe276d760ced8ac37120cd9e4687e5aa84 (diff) | |
[YoutubeDL] Honour all --get-* options with --flat-playlist (closes #22493)
| -rwxr-xr-x | youtube_dl/YoutubeDL.py | 62 | 
1 files changed, 35 insertions, 27 deletions
| diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index 6a44bc7ba..c3d1407f9 100755 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -852,8 +852,9 @@ class YoutubeDL(object):              extract_flat = self.params.get('extract_flat', False)              if ((extract_flat == 'in_playlist' and 'playlist' in extra_info)                      or extract_flat is True): -                if self.params.get('forcejson', False): -                    self.to_stdout(json.dumps(ie_result)) +                self.__forced_printings( +                    ie_result, self.prepare_filename(ie_result), +                    incomplete=True)                  return ie_result          if result_type == 'video': @@ -1693,6 +1694,36 @@ class YoutubeDL(object):              subs[lang] = f          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):          """Process a single resolved IE result.""" @@ -1703,9 +1734,8 @@ class YoutubeDL(object):              if self._num_downloads >= int(max_downloads):                  raise MaxDownloadsReached() +        # TODO: backward compatibility, to be removed          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:              info_dict['format'] = info_dict['ext'] @@ -1720,29 +1750,7 @@ class YoutubeDL(object):          info_dict['_filename'] = filename = self.prepare_filename(info_dict)          # Forced printings -        if self.params.get('forcetitle', 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)) +        self.__forced_printings(info_dict, filename, incomplete=False)          # Do nothing else if in simulate mode          if self.params.get('simulate', False): | 
