| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- # -*- 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': []}],
- "rules": [
- "MATCH,Global"
- ]
- }
- 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']
- hk_group = {'name': '香港', 'type': 'select', 'proxies': []}
- hk_list = ['HK', '香港']
- for proxy in proxy_groups:
- if any(keyword in proxy for keyword in hk_list):
- hk_group['proxies'].append(proxy)
- if hk_group['proxies']:
- config_template['proxy-groups'].append(hk_group)
- tw_group = {'name': '台湾', 'type': 'select', 'proxies': []}
- tw_list = ['TW', '台湾']
- for proxy in proxy_groups:
- if any(keyword in proxy for keyword in tw_list):
- tw_group['proxies'].append(proxy)
- if tw_group['proxies']:
- config_template['proxy-groups'].append(tw_group)
- first_element = config_template['proxy-groups'].pop(0)
- config_template['proxy-groups'].append(first_element)
- 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!')
|