integrate_proxy.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. # -*- coding: utf-8 -*-
  2. import os
  3. import yaml
  4. # 读取的 yaml 的文件名
  5. bitz_file_name = 'Bitz Net.yaml'
  6. xfltd_file_name = 'XFLTD.yaml'
  7. partiot_file_name = 'index.php.yaml'
  8. # 创建 config.yaml 模版, 读出来的 proxies 和 proxy-groups 存到对应的地方, rules 不要了
  9. config_template = {
  10. "mixed-port": 7890,
  11. "allow-lan": True,
  12. "bind-address": "*",
  13. "mode": "rule",
  14. "log-level": "info",
  15. "external-controller": "127.0.0.1:9090",
  16. "secret": "",
  17. "dns": {
  18. "enable": False,
  19. "ipv6": False,
  20. "nameserver": [],
  21. "fallback": []
  22. },
  23. "proxies": [],
  24. "proxy-groups": [],
  25. }
  26. def process_bitz():
  27. if not os.path.exists(bitz_file_name):
  28. return
  29. data = None
  30. with open(bitz_file_name, 'r', encoding='utf-8') as file:
  31. data = yaml.safe_load(file)
  32. if not data:
  33. return
  34. proxies = data['proxies']
  35. proxy_groups = data['proxy-groups']
  36. # print(proxies)
  37. # print(proxy_groups)
  38. # 下面开始处理 proxies 和 proxy-groups
  39. # 处理 proxies
  40. for proxy in proxies:
  41. config_template['proxies'].append(proxy)
  42. keywords_to_remove = ['自动选择', '故障转移']
  43. group = {'name': 'Bitz Net', 'type': 'select', 'proxies': []}
  44. for proxy_group in proxy_groups:
  45. if proxy_group['name'] != 'Bitz Net':
  46. continue
  47. for proxy in proxy_group['proxies']:
  48. if any(keyword in proxy for keyword in keywords_to_remove):
  49. continue
  50. group['proxies'].append(proxy)
  51. if not group['proxies']:
  52. return
  53. config_template['proxy-groups'].append(group)
  54. def process_xfltd():
  55. if not os.path.exists(xfltd_file_name):
  56. return
  57. data = None
  58. with open(xfltd_file_name, 'r', encoding='utf-8') as file:
  59. data = yaml.safe_load(file)
  60. if not data:
  61. return
  62. proxies = data['proxies']
  63. proxy_groups = data['proxy-groups']
  64. # print(proxies)
  65. # print(proxy_groups)
  66. # 处理 proxies
  67. for proxy in proxies:
  68. if '剩余流量' in proxy['name'] or '套餐到期' in proxy['name']:
  69. continue
  70. config_template['proxies'].append(proxy)
  71. # 处理 proxy-groups
  72. keywords_to_remove = ['自动选择', '故障转移', '剩余流量', '套餐到期']
  73. group = {'name': 'XFLTD', 'type': 'select', 'proxies': []}
  74. for proxy_group in proxy_groups:
  75. if proxy_group['name'] != 'XFLTD':
  76. continue
  77. for proxy in proxy_group['proxies']:
  78. if any(keyword in proxy for keyword in keywords_to_remove):
  79. continue
  80. group['proxies'].append(proxy)
  81. if not group['proxies']:
  82. return
  83. config_template['proxy-groups'].append(group)
  84. def process_partiot():
  85. if not os.path.exists(partiot_file_name):
  86. return
  87. data = None
  88. with open(partiot_file_name, 'r', encoding='utf-8') as file:
  89. data = yaml.safe_load(file)
  90. if not data:
  91. return
  92. proxies = data['proxies']
  93. proxy_groups = data['proxy-groups']
  94. # 处理 proxies
  95. for proxy in proxies:
  96. config_template['proxies'].append(proxy)
  97. for proxy_group in proxy_groups:
  98. if proxy_group['name'] == 'select':
  99. proxy_group['name'] = 'partiot'
  100. config_template['proxy-groups'].append(proxy_group)
  101. break
  102. if __name__ == '__main__':
  103. process_xfltd()
  104. process_bitz()
  105. process_partiot()
  106. # print(config_template)
  107. with open('test.yaml', 'w', encoding='utf-8') as file:
  108. yaml.dump(config_template, file, allow_unicode=True, default_flow_style=False)
  109. print('done!')