clash-group-proxy.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # -*- coding: utf-8 -*-
  2. import os
  3. import yaml
  4. import shutil
  5. # 分组关键词
  6. proxy_split_group = {
  7. "US": ['us', '美国', 'la-', '加拿大'],
  8. 'UE': ['uk', '英国'],
  9. 'ASIA': ['hk', '香港', 'tw', '台湾', 'sg', '新加坡', '马来西亚', '澳门', '泰国', '日本', 'jp', '韩国']
  10. }
  11. # 新文件夹名称
  12. new_folder_name = "config"
  13. downloads_path = os.path.join(os.path.expanduser('~'), 'Downloads')
  14. # 新文件夹的完整路径
  15. new_folder_path = os.path.join(downloads_path, new_folder_name)
  16. # 如果文件夹存在,删除整个文件夹
  17. if os.path.exists(new_folder_path):
  18. shutil.rmtree(new_folder_path)
  19. # 创建新的文件夹
  20. os.makedirs(new_folder_path)
  21. config_path = os.path.join(os.getcwd(), "merge.yaml")
  22. with open(config_path, 'r', encoding='utf-8') as file:
  23. data = yaml.safe_load(file)
  24. if not data:
  25. print(f"Error reading {config_path}")
  26. exit(1)
  27. config_name_serial_start = 1
  28. port_start = 7890
  29. out_data = {}
  30. for i in data.setdefault('proxies'):
  31. for group_name, group_keywords in proxy_split_group.items():
  32. if any(keyword in i['name'].lower() for keyword in group_keywords):
  33. if group_name not in out_data:
  34. out_data[group_name] = []
  35. if i['name'] not in [x['name'] for x in out_data[group_name]]:
  36. out_data[group_name].append(i)
  37. for g_name, g_proxy in out_data.items():
  38. config_template = {
  39. "mixed-port": port_start,
  40. "allow-lan": True,
  41. "bind-address": "*",
  42. "mode": "rule",
  43. "log-level": "info",
  44. "external-controller": "0.0.0.0:9090",
  45. "secret": "",
  46. "dns": {
  47. "enable": False,
  48. "ipv6": False,
  49. "nameserver": [],
  50. "fallback": []
  51. },
  52. "proxies": [],
  53. "proxy-groups": [{'name': '所有节点', 'type': 'select', 'proxies': []}],
  54. }
  55. for proxy in g_proxy:
  56. config_template['proxies'].append(proxy)
  57. config_template['proxy-groups'][0]['proxies'].append(proxy['name'])
  58. config_path = os.path.join(new_folder_path, f'{g_name.lower()}.yaml')
  59. with open(config_path, 'w', encoding='utf-8') as file:
  60. yaml.dump(config_template, file, allow_unicode=True, sort_keys=False)
  61. print('OK')