integrate_proxy.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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": [{'name': 'Global', 'type': 'select', 'proxies': []}],
  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. for proxy_group in proxy_groups:
  44. if proxy_group['name'] != 'Bitz Net':
  45. continue
  46. for proxy in proxy_group['proxies']:
  47. if any(keyword in proxy for keyword in keywords_to_remove):
  48. continue
  49. config_template['proxy-groups'][0]['proxies'].append(proxy)
  50. def process_xfltd():
  51. if not os.path.exists(xfltd_file_name):
  52. return
  53. data = None
  54. with open(xfltd_file_name, 'r', encoding='utf-8') as file:
  55. data = yaml.safe_load(file)
  56. if not data:
  57. return
  58. proxies = data['proxies']
  59. proxy_groups = data['proxy-groups']
  60. # print(proxies)
  61. # print(proxy_groups)
  62. # 处理 proxies
  63. for proxy in proxies:
  64. if '剩余流量' in proxy['name'] or '套餐到期' in proxy['name']:
  65. continue
  66. config_template['proxies'].append(proxy)
  67. # 处理 proxy-groups
  68. keywords_to_remove = ['自动选择', '故障转移', '剩余流量', '套餐到期']
  69. for proxy_group in proxy_groups:
  70. if proxy_group['name'] != 'XFLTD':
  71. continue
  72. for proxy in proxy_group['proxies']:
  73. if any(keyword in proxy for keyword in keywords_to_remove):
  74. continue
  75. config_template['proxy-groups'][0]['proxies'].append(proxy)
  76. def process_partiot():
  77. if not os.path.exists(partiot_file_name):
  78. return
  79. data = None
  80. with open(partiot_file_name, 'r', encoding='utf-8') as file:
  81. data = yaml.safe_load(file)
  82. if not data:
  83. return
  84. proxies = data['proxies']
  85. proxy_groups = data['proxy-groups']
  86. # 处理 proxies
  87. for proxy in proxies:
  88. config_template['proxies'].append(proxy)
  89. for proxy_group in proxy_groups:
  90. if proxy_group['name'] == 'select':
  91. for proxy in proxy_group['proxies']:
  92. config_template['proxy-groups'][0]['proxies'].append(proxy)
  93. def sort_proxies():
  94. try:
  95. proxies = config_template['proxies']
  96. groups = config_template['proxy-groups'][0]['proxies']
  97. # 排序 proxies 列表
  98. sorted_proxies = sorted(proxies, key=lambda x: x['name'] if 'name' in x else '')
  99. # 排序 groups 列表
  100. sorted_groups = sorted(groups)
  101. # 更新 config_template 中的 proxies 和 groups
  102. config_template['proxies'] = sorted_proxies
  103. config_template['proxy-groups'][0]['proxies'] = sorted_groups
  104. except Exception as e:
  105. print(e)
  106. def category_group():
  107. # 首先 load 整个分类
  108. proxy_groups = config_template['proxy-groups'][0]['proxies']
  109. need_group = {'name': 'groups', 'type': 'select', 'proxies': []}
  110. need_list = ['HK', '香港', 'TW', '台湾', '新加坡', '日本', '马来西亚', '菲律宾']
  111. for proxy in proxy_groups:
  112. if any(keyword in proxy for keyword in need_list):
  113. need_group['proxies'].append(proxy)
  114. if need_group['proxies']:
  115. config_template['proxy-groups'].append(need_group)
  116. first_element = config_template['proxy-groups'].pop(0)
  117. if __name__ == '__main__':
  118. process_xfltd()
  119. process_bitz()
  120. process_partiot()
  121. sort_proxies()
  122. category_group()
  123. with open('config.yaml', 'w', encoding='utf-8') as file:
  124. yaml.dump(config_template, file, allow_unicode=True, default_flow_style=False)
  125. print('done!')