merge2config.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # -*- coding: utf-8 -*-
  2. import os
  3. import yaml
  4. # 读取的 yaml 的文件名
  5. file_name = 'merge.yaml'
  6. # 过滤代理
  7. filter_proxy_group = ['HK',
  8. '香港',
  9. 'TW',
  10. '台湾',
  11. 'JP',
  12. '日本',
  13. '马来西亚',
  14. 'SG',
  15. '新加坡']
  16. # 创建 config.yaml 模版, 读出来的 proxies 和 proxy-groups 存到对应的地方, rules 不要了
  17. config_template = {
  18. "mixed-port": 7890,
  19. "allow-lan": True,
  20. "bind-address": "*",
  21. "mode": "rule",
  22. "log-level": "info",
  23. "external-controller": "0.0.0.0:9090",
  24. "secret": "",
  25. "dns": {
  26. "enable": False,
  27. "ipv6": False,
  28. "nameserver": [],
  29. "fallback": []
  30. },
  31. "proxies": [],
  32. "proxy-groups": [],
  33. }
  34. def process_yaml_file():
  35. temp_data = []
  36. data = None
  37. with open(file_name, 'r', encoding='utf-8') as file:
  38. data = yaml.safe_load(file)
  39. if not data:
  40. print(f"Error reading {file_name}")
  41. return
  42. proxies = data['proxies']
  43. for proxy in proxies:
  44. if '剩余流量' in proxy['name']:
  45. continue
  46. if '套餐到期' in proxy['name']:
  47. continue
  48. check_in_group = False
  49. for keyword in filter_proxy_group:
  50. if keyword in proxy['name']:
  51. check_in_group = True
  52. if not check_in_group:
  53. continue
  54. print('{}: {}'.format(file_name, proxy['name']))
  55. temp_data.append(proxy)
  56. sorted_proxies = sorted(temp_data, key=lambda x: x['name'] if 'name' in x else '')
  57. if temp_data:
  58. config_template['proxies'] = sorted_proxies
  59. # 创建 proxy-groups 中的 select 组,包含所有 proxies
  60. select_group = {
  61. "name": "GLOBAL",
  62. "type": "select",
  63. "proxies": [proxy['name'] for proxy in sorted_proxies]
  64. }
  65. config_template['proxy-groups'].append(select_group)
  66. if __name__ == '__main__':
  67. process_yaml_file()
  68. with open(f'config.yaml', 'w', encoding='utf-8') as file:
  69. yaml.dump(config_template, file, allow_unicode=True, default_flow_style=False)
  70. print('done!')