integrate_proxy.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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. "rules": [
  26. "MATCH,Global"
  27. ]
  28. }
  29. def process_bitz():
  30. if not os.path.exists(bitz_file_name):
  31. return
  32. data = None
  33. with open(bitz_file_name, 'r', encoding='utf-8') as file:
  34. data = yaml.safe_load(file)
  35. if not data:
  36. return
  37. proxies = data['proxies']
  38. proxy_groups = data['proxy-groups']
  39. # print(proxies)
  40. # print(proxy_groups)
  41. # 下面开始处理 proxies 和 proxy-groups
  42. # 处理 proxies
  43. for proxy in proxies:
  44. config_template['proxies'].append(proxy)
  45. keywords_to_remove = ['自动选择', '故障转移']
  46. for proxy_group in proxy_groups:
  47. if proxy_group['name'] != 'Bitz Net':
  48. continue
  49. for proxy in proxy_group['proxies']:
  50. if any(keyword in proxy for keyword in keywords_to_remove):
  51. continue
  52. config_template['proxy-groups'][0]['proxies'].append(proxy)
  53. def process_xfltd():
  54. if not os.path.exists(xfltd_file_name):
  55. return
  56. data = None
  57. with open(xfltd_file_name, 'r', encoding='utf-8') as file:
  58. data = yaml.safe_load(file)
  59. if not data:
  60. return
  61. proxies = data['proxies']
  62. proxy_groups = data['proxy-groups']
  63. # print(proxies)
  64. # print(proxy_groups)
  65. # 处理 proxies
  66. for proxy in proxies:
  67. if '剩余流量' in proxy['name'] or '套餐到期' in proxy['name']:
  68. continue
  69. config_template['proxies'].append(proxy)
  70. # 处理 proxy-groups
  71. keywords_to_remove = ['自动选择', '故障转移', '剩余流量', '套餐到期']
  72. for proxy_group in proxy_groups:
  73. if proxy_group['name'] != 'XFLTD':
  74. continue
  75. for proxy in proxy_group['proxies']:
  76. if any(keyword in proxy for keyword in keywords_to_remove):
  77. continue
  78. config_template['proxy-groups'][0]['proxies'].append(proxy)
  79. def process_partiot():
  80. if not os.path.exists(partiot_file_name):
  81. return
  82. data = None
  83. with open(partiot_file_name, 'r', encoding='utf-8') as file:
  84. data = yaml.safe_load(file)
  85. if not data:
  86. return
  87. proxies = data['proxies']
  88. proxy_groups = data['proxy-groups']
  89. # 处理 proxies
  90. for proxy in proxies:
  91. config_template['proxies'].append(proxy)
  92. for proxy_group in proxy_groups:
  93. if proxy_group['name'] == 'select':
  94. for proxy in proxy_group['proxies']:
  95. config_template['proxy-groups'][0]['proxies'].append(proxy)
  96. def sort_proxies():
  97. try:
  98. proxies = config_template['proxies']
  99. groups = config_template['proxy-groups'][0]['proxies']
  100. # 排序 proxies 列表
  101. sorted_proxies = sorted(proxies, key=lambda x: x['name'] if 'name' in x else '')
  102. # 排序 groups 列表
  103. sorted_groups = sorted(groups)
  104. # 更新 config_template 中的 proxies 和 groups
  105. config_template['proxies'] = sorted_proxies
  106. config_template['proxy-groups'][0]['proxies'] = sorted_groups
  107. except Exception as e:
  108. print(e)
  109. def category_group():
  110. # 首先 load 整个分类
  111. proxy_groups = config_template['proxy-groups'][0]['proxies']
  112. hk_group = {'name': '香港', 'type': 'select', 'proxies': []}
  113. hk_list = ['HK', '香港']
  114. for proxy in proxy_groups:
  115. if any(keyword in proxy for keyword in hk_list):
  116. hk_group['proxies'].append(proxy)
  117. if hk_group['proxies']:
  118. config_template['proxy-groups'].append(hk_group)
  119. tw_group = {'name': '台湾', 'type': 'select', 'proxies': []}
  120. tw_list = ['TW', '台湾']
  121. for proxy in proxy_groups:
  122. if any(keyword in proxy for keyword in tw_list):
  123. tw_group['proxies'].append(proxy)
  124. if tw_group['proxies']:
  125. config_template['proxy-groups'].append(tw_group)
  126. first_element = config_template['proxy-groups'].pop(0)
  127. config_template['proxy-groups'].append(first_element)
  128. if __name__ == '__main__':
  129. process_xfltd()
  130. process_bitz()
  131. process_partiot()
  132. sort_proxies()
  133. category_group()
  134. with open('config.yaml', 'w', encoding='utf-8') as file:
  135. yaml.dump(config_template, file, allow_unicode=True, default_flow_style=False)
  136. print('done!')