From a7b3e042aa6e3b985731333353d8aff9d3f06924 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Sun, 29 Oct 2023 16:03:42 +0800 Subject: [PATCH] Add update_clash.py --- .gitignore | 1 + update_clash.py | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 update_clash.py diff --git a/.gitignore b/.gitignore index 0dc12eb..3b7b513 100644 --- a/.gitignore +++ b/.gitignore @@ -137,3 +137,4 @@ dmypy.json !*.example.jsonc *.epub !*.schema.json +update_clash.yaml diff --git a/update_clash.py b/update_clash.py new file mode 100644 index 0000000..9e68fb9 --- /dev/null +++ b/update_clash.py @@ -0,0 +1,60 @@ +from yaml import load, dump +try: + from yaml import CSafeLoader as SafeLoader, CSafeDumper as SafeDumper +except ImportError: + from yaml import SafeLoader, SafeDumper +from argparse import ArgumentParser +import requests +import re + + +def get_src(src): + if isinstance(src, str): + return requests.get(src).content + else: + url = src["url"] + headers = {} + if "headers" in src: + headers = src["headers"] + return requests.get(url, headers=headers).content + + +p = ArgumentParser() +p.add_argument("-c", "--config", help="configurtion files", + default="update_clash.yaml") +arg = p.parse_intermixed_args() +with open(arg.config) as f: + config = load(f, Loader=SafeLoader) +ori = load(get_src(config["src"]), Loader=SafeLoader) +with open(config["dest"]) as f: + dest = load(f, Loader=SafeLoader) +dest["proxies"] = ori["proxies"] +if "proxies" in config: + dest["proxies"] += config["proxies"] +dest["proxy-groups"] = ori["proxy-groups"] +if "proxy-groups" in config: + dest["proxy-groups"] = [] + for group in config["proxy-groups"]: + if 'proxies' not in group: + group['proxies'] = [] + if 'match-all' in group: + if group['match-all']: + for i in dest["proxies"]: + group['proxies'].append(i['name']) + del group['match-all'] + if 'match' in group: + for m in group['match']: + for i in dest["proxies"]: + if re.match(m, i['name']): + if i['name'] not in group['proxies']: + group['proxies'].append(i['name']) + del group['match'] + if 'add-direct' in group: + if group['add-direct']: + group['proxies'].append('DIRECT') + del group['add-direct'] + dest["proxy-groups"].append(group) +if 'rules' in config: + dest['rules'] = config['rules'] +with open(config["dest"], "w") as f: + dump(dest, f, Dumper=SafeDumper, allow_unicode=True)