diff options
| -rwxr-xr-x | youtube_dl/YoutubeDL.py | 9 | ||||
| -rw-r--r-- | youtube_dl/__init__.py | 3 | ||||
| -rw-r--r-- | youtube_dl/options.py | 4 | 
3 files changed, 14 insertions, 2 deletions
diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index 6aa1fd105..75461f19d 100755 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -107,6 +107,8 @@ class YoutubeDL(object):      forcefilename:     Force printing final filename.      forceduration:     Force printing duration.      forcejson:         Force printing info_dict as JSON. +    dump_single_json:  Force printing the info_dict of the whole playlist +                       (or video) as a single JSON line.      simulate:          Do not download the video files.      format:            Video format code.      format_limit:      Highest quality format to try. @@ -903,6 +905,8 @@ class YoutubeDL(object):          if self.params.get('forcejson', False):              info_dict['_filename'] = filename              self.to_stdout(json.dumps(info_dict)) +        if self.params.get('dump_single_json', False): +            info_dict['_filename'] = filename          # Do nothing else if in simulate mode          if self.params.get('simulate', False): @@ -1070,12 +1074,15 @@ class YoutubeDL(object):          for url in url_list:              try:                  #It also downloads the videos -                self.extract_info(url) +                res = self.extract_info(url)              except UnavailableVideoError:                  self.report_error('unable to download video')              except MaxDownloadsReached:                  self.to_screen('[info] Maximum number of downloaded files reached.')                  raise +            else: +                if self.params.get('dump_single_json', False): +                    self.to_stdout(json.dumps(res))          return self._download_retcode diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 6b0efe059..c8bcc6e46 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -284,7 +284,7 @@ def _real_main(argv=None):                       u' file! Use "{0}.%(ext)s" instead of "{0}" as the output'                       u' template'.format(outtmpl)) -    any_printing = opts.geturl or opts.gettitle or opts.getid or opts.getthumbnail or opts.getdescription or opts.getfilename or opts.getformat or opts.getduration or opts.dumpjson +    any_printing = opts.geturl or opts.gettitle or opts.getid or opts.getthumbnail or opts.getdescription or opts.getfilename or opts.getformat or opts.getduration or opts.dumpjson or opts.dump_single_json      download_archive_fn = os.path.expanduser(opts.download_archive) if opts.download_archive is not None else opts.download_archive      ydl_opts = { @@ -304,6 +304,7 @@ def _real_main(argv=None):          'forcefilename': opts.getfilename,          'forceformat': opts.getformat,          'forcejson': opts.dumpjson, +        'dump_single_json': opts.dump_single_json,          'simulate': opts.simulate,          'skip_download': (opts.skip_download or opts.simulate or any_printing),          'format': opts.format, diff --git a/youtube_dl/options.py b/youtube_dl/options.py index 2b1cd7438..2ccc63fc5 100644 --- a/youtube_dl/options.py +++ b/youtube_dl/options.py @@ -418,6 +418,10 @@ def parseOpts(overrideArguments=None):          action='store_true', dest='dumpjson', default=False,          help='simulate, quiet but print JSON information. See --output for a description of available keys.')      verbosity.add_option( +        '-J', '--dump-single-json', +        action='store_true', dest='dump_single_json', default=False, +        help='simulate, quiet but print JSON information for each command-line argument. If the URL refers to a playlist, dump the whole playlist information in a single line.') +    verbosity.add_option(          '--newline',          action='store_true', dest='progress_with_newline', default=False,          help='output progress bar as new lines')  | 
