mirror of https://github.com/ytdl-org/youtube-dl
parent
e8de54bce5
commit
70ff013910
1 changed files with 64 additions and 0 deletions
@ -0,0 +1,64 @@ |
||||
#!/usr/bin/env python |
||||
# coding: utf-8 |
||||
|
||||
from __future__ import unicode_literals |
||||
|
||||
""" |
||||
This script displays the API parameters corresponding to a yt-dl command line |
||||
|
||||
Example: |
||||
$ ./cli_to_api.py -f best |
||||
{u'format': 'best'} |
||||
$ |
||||
""" |
||||
|
||||
# Allow direct execution |
||||
import os |
||||
import sys |
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
||||
|
||||
import youtube_dl |
||||
from types import MethodType |
||||
|
||||
|
||||
def cli_to_api(*opts): |
||||
YDL = youtube_dl.YoutubeDL |
||||
|
||||
# to extract the parsed options, break out of YoutubeDL instantiation |
||||
|
||||
# return options via this Exception |
||||
class ParseYTDLResult(Exception): |
||||
def __init__(self, result): |
||||
super(ParseYTDLResult, self).__init__('result') |
||||
self.opts = result |
||||
|
||||
# replacement constructor that raises ParseYTDLResult |
||||
def ytdl_init(ydl, ydl_opts): |
||||
super(YDL, ydl).__init__(ydl_opts) |
||||
raise ParseYTDLResult(ydl_opts) |
||||
|
||||
# patch in the constructor |
||||
YDL.__init__ = MethodType(ytdl_init, YDL) |
||||
|
||||
# core parser |
||||
def parsed_options(argv): |
||||
try: |
||||
youtube_dl._real_main(list(argv)) |
||||
except ParseYTDLResult as result: |
||||
return result.opts |
||||
|
||||
# from https://github.com/yt-dlp/yt-dlp/issues/5859#issuecomment-1363938900 |
||||
default = parsed_options([]) |
||||
diff = dict((k, v) for k, v in parsed_options(opts).items() if default[k] != v) |
||||
if 'postprocessors' in diff: |
||||
diff['postprocessors'] = [pp for pp in diff['postprocessors'] if pp not in default['postprocessors']] |
||||
return diff |
||||
|
||||
|
||||
def main(): |
||||
from pprint import pprint |
||||
pprint(cli_to_api(*sys.argv)) |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
main() |
Loading…
Reference in new issue