# -*- coding: utf-8 -*- import os import yaml # 读取的 yaml 的文件名 bitz_file_name = 'Bitz Net.yaml' xfltd_file_name = 'XFLTD.yaml' partiot_file_name = 'index.php.yaml' # 创建 config.yaml 模版, 读出来的 proxies 和 proxy-groups 存到对应的地方, rules 不要了 config_template = { "mixed-port": 7890, "allow-lan": True, "bind-address": "*", "mode": "rule", "log-level": "info", "external-controller": "127.0.0.1:9090", "secret": "", "dns": { "enable": False, "ipv6": False, "nameserver": [], "fallback": [] }, "proxies": [], "proxy-groups": [{'name': 'Global', 'type': 'select', 'proxies': []}], } def process_bitz(): if not os.path.exists(bitz_file_name): return data = None with open(bitz_file_name, 'r', encoding='utf-8') as file: data = yaml.safe_load(file) if not data: return proxies = data['proxies'] proxy_groups = data['proxy-groups'] # print(proxies) # print(proxy_groups) # 下面开始处理 proxies 和 proxy-groups # 处理 proxies for proxy in proxies: config_template['proxies'].append(proxy) keywords_to_remove = ['自动选择', '故障转移'] for proxy_group in proxy_groups: if proxy_group['name'] != 'Bitz Net': continue for proxy in proxy_group['proxies']: if any(keyword in proxy for keyword in keywords_to_remove): continue config_template['proxy-groups'][0]['proxies'].append(proxy) def process_xfltd(): if not os.path.exists(xfltd_file_name): return data = None with open(xfltd_file_name, 'r', encoding='utf-8') as file: data = yaml.safe_load(file) if not data: return proxies = data['proxies'] proxy_groups = data['proxy-groups'] # print(proxies) # print(proxy_groups) # 处理 proxies for proxy in proxies: if '剩余流量' in proxy['name'] or '套餐到期' in proxy['name']: continue config_template['proxies'].append(proxy) # 处理 proxy-groups keywords_to_remove = ['自动选择', '故障转移', '剩余流量', '套餐到期'] for proxy_group in proxy_groups: if proxy_group['name'] != 'XFLTD': continue for proxy in proxy_group['proxies']: if any(keyword in proxy for keyword in keywords_to_remove): continue config_template['proxy-groups'][0]['proxies'].append(proxy) def process_partiot(): if not os.path.exists(partiot_file_name): return data = None with open(partiot_file_name, 'r', encoding='utf-8') as file: data = yaml.safe_load(file) if not data: return proxies = data['proxies'] proxy_groups = data['proxy-groups'] # 处理 proxies for proxy in proxies: config_template['proxies'].append(proxy) for proxy_group in proxy_groups: if proxy_group['name'] == 'select': for proxy in proxy_group['proxies']: config_template['proxy-groups'][0]['proxies'].append(proxy) def sort_proxies(): try: proxies = config_template['proxies'] groups = config_template['proxy-groups'][0]['proxies'] # 排序 proxies 列表 sorted_proxies = sorted(proxies, key=lambda x: x['name'] if 'name' in x else '') # 排序 groups 列表 sorted_groups = sorted(groups) # 更新 config_template 中的 proxies 和 groups config_template['proxies'] = sorted_proxies config_template['proxy-groups'][0]['proxies'] = sorted_groups except Exception as e: print(e) def category_group(): # 首先 load 整个分类 proxy_groups = config_template['proxy-groups'][0]['proxies'] need_group = {'name': 'groups', 'type': 'select', 'proxies': []} need_list = ['HK', '香港', 'TW', '台湾', '新加坡', '日本', '马来西亚', '菲律宾'] for proxy in proxy_groups: if any(keyword in proxy for keyword in need_list): need_group['proxies'].append(proxy) if need_group['proxies']: config_template['proxy-groups'].append(need_group) first_element = config_template['proxy-groups'].pop(0) if __name__ == '__main__': process_xfltd() process_bitz() process_partiot() sort_proxies() category_group() with open('config.yaml', 'w', encoding='utf-8') as file: yaml.dump(config_template, file, allow_unicode=True, default_flow_style=False) print('done!')