# Clash Subscription Merger 一个智能的 Clash 节点订阅合并工具,能够将多个 VPN 订阅链接合并为统一的配置文件,支持自动节点分类、流量信息提取和智能排序。 ## 功能特性 - **多订阅源合并**: 支持合并多个 Base64 编码的 Clash 订阅链接 - **智能节点过滤**: 自动过滤掉包含流量信息和到期时间的无效节点 - **地区自动分类**: 根据节点名称自动归类到香港、新加坡、美国等地区 - **流量信息提取**: 智能提取订阅中的流量信息并添加到组名中 - **名称冲突处理**: 自动处理重复节点名称,使用 `_Num` 后缀 - **智能排序**: 按平均每日剩余流量对订阅组进行排序 - **文件自动替换**: 支持自动替换指定目标文件 ## 项目结构 ``` clash-Subscribe/ ├── merger.py # 主脚本,包含 ClashSubscriptionMerger 类 ├── demo.py # 演示脚本,创建测试数据 ├── subscribe.json # 订阅配置文件 ├── temp.yaml # Clash 配置模板文件 ├── merge.yaml # 最终输出的合并配置文件 ├── Replacement.txt # 目标文件路径配置(可选) ├── temp/ # 临时文件目录 ├── pyproject.toml # Python 项目配置 └── README.md # 项目说明文档 ``` ## 安装与使用 ### 环境要求 - Python 3.8+ - uv 包管理器(推荐) ### 安装依赖 ```bash # 使用 uv(推荐) uv sync # 或使用 pip pip install requests pyyaml ``` ### 配置订阅 编辑 `subscribe.json` 文件,添加你的订阅信息: ```json [ { "group_name": "订阅组名称", "url": "https://your-subscription-url" }, { "group_name": "另一个订阅", "url": "https://another-subscription-url" } ] ``` ### 运行程序 ```bash python merger.py ## 或者 uv run merger.py ``` ### 生成演示数据 ```bash python demo.py ``` ## 配置说明 ### 地区分类规则 程序会根据以下关键词自动分类节点: - **香港**: HKG, 🇭🇰, HongKong, Hong Kong, HK - **新加坡**: Singapore, 🇸🇬, SGP, SG - **美国**: USA, 🇺🇸, United States, US, America ### 节点过滤规则 #### Proxy 节点过滤 自动过滤包含以下关键词的节点: - `剩余流量` - `套餐到期` - `未到期` 注意:保留包含 `距离下次重置剩余` 的节点。 #### Proxy Groups 节点过滤 过滤以下前缀开头的节点: - `Auto` - `剩余流量` - `套餐到期` - `未到期` ### 流量信息提取 程序支持提取以下格式的流量信息: - `剩余流量: XX.XX GB` - `流量: XX.XX GB` - `总流量: XX.XX GB` 提取的流量信息会自动添加到订阅组名中,如:`TrustedAccessPath(183.54 GB)` ### 智能排序 新添加的订阅组会按照平均每日剩余流量(GB/天)进行降序排序,流量更多的组排在前面。 ## 高级功能 ### 自动文件替换 创建 `Replacement.txt` 文件,输入目标文件的完整路径: ``` /path/to/your/clash/config.yaml ``` 程序完成合并后会自动将 `merge.yaml` 的内容替换到指定文件中。 ### 模板文件自定义 `temp.yaml` 文件包含基础的 Clash 配置: - 网络设置(端口 7890,DNS 配置) - 地区代理组(Auto-香港,Auto-新加坡,Auto-USA) - 路由规则(中国域名、国际域名) - 广告屏蔽规则 ## 工作流程 1. **加载配置**: 从 `subscribe.json` 读取订阅信息 2. **获取订阅**: 下载并解码 Base64 订阅内容 3. **保存临时文件**: 将订阅内容保存到 `temp/` 目录 4. **处理节点**: 提取代理节点并应用过滤规则 5. **提取流量信息**: 使用正则表达式提取流量和天数信息 6. **地区分类**: 根据节点名称自动分类到对应地区 7. **名称去重**: 处理重复节点名称冲突 8. **智能排序**: 按平均每日流量对订阅组排序 9. **生成配置**: 使用模板合并所有数据生成 `merge.yaml` 10. **文件替换**: 可选地替换指定的目标文件 ## 输出示例 ``` 开始处理Clash订阅合并... 正在处理订阅: TrustedAccessPath 已保存临时文件: temp/TrustedAccessPath.yaml 处理文件: temp/TrustedAccessPath.yaml 提取到流量信息: TrustedAccessPath -> 183.54 GB 提取到剩余天数: TrustedAccessPath -> 25天 平均每天剩余流量: TrustedAccessPath -> 7.34GB/天 更新组名: TrustedAccessPath -> TrustedAccessPath(183.54 GB) 合并完成! 总共合并了 156 个节点 香港节点: 45 个 新加坡节点: 38 个 美国节点: 42 个 其他节点组: 3 个 ``` ## 注意事项 - 程序会自动创建 `temp/` 目录存储临时文件 - 如果临时文件已存在,程序会跳过重新下载 - 建议定期清理 `temp/` 目录中的过期文件 - 请确保订阅 URL 的有效性和访问权限 - 生成的 `merge.yaml` 文件可直接用于 Clash 客户端 ## 依赖项 - `requests>=2.31.0` - HTTP 请求库 - `pyyaml>=6.0.1` - YAML 文件处理库 ## 许可证 本项目采用开源许可证,具体详情请查看项目仓库。