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. #
  53. # if not check_in_group:
  54. # continue
  55. print('{}: {}'.format(file_name, proxy['name']))
  56. temp_data.append(proxy)
  57. sorted_proxies = sorted(temp_data, key=lambda x: x['name'] if 'name' in x else '')
  58. if temp_data:
  59. config_template['proxies'] = sorted_proxies
  60. # 创建 proxy-groups 中的 select 组,包含所有 proxies
  61. select_group = {
  62. "name": "GLOBAL",
  63. "type": "select",
  64. "proxies": [proxy['name'] for proxy in sorted_proxies]
  65. }
  66. config_template['proxy-groups'].append(select_group)
  67. if __name__ == '__main__':
  68. process_yaml_file()
  69. with open(f'config.yaml', 'w', encoding='utf-8') as file:
  70. yaml.dump(config_template, file, allow_unicode=True, default_flow_style=False)
  71. print('done!')