New option --dump-single-json (#4003)
authorPhilipp Hagemeister <phihag@phihag.de>
Fri, 24 Oct 2014 22:30:57 +0000 (00:30 +0200)
committerPhilipp Hagemeister <phihag@phihag.de>
Fri, 24 Oct 2014 22:30:57 +0000 (00:30 +0200)
youtube_dl/YoutubeDL.py
youtube_dl/__init__.py
youtube_dl/options.py

index 6aa1fd105e78a87e06ece2a62cc80532525ece71..75461f19d06d87e393d8428388119e83b11a98e2 100755 (executable)
@@ -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
 
index 6b0efe059352ab252476b4df808c6cfdbfdcc121..c8bcc6e46c9d736fcbaa09318c4a2b0725d5a94f 100644 (file)
@@ -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,
index 2b1cd7438669584ea79512e6def4f2272419f004..2ccc63fc5e630763f69f0a12fb4d2230bef9bf7a 100644 (file)
@@ -417,6 +417,10 @@ def parseOpts(overrideArguments=None):
         '-j', '--dump-json',
         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,