Files
ClashSubscribeMerge/README.md
2025-07-23 19:31:36 +08:00

189 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 配置:
- 网络设置(端口 7890DNS 配置)
- 地区代理组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 文件处理库
## 许可证
本项目采用开源许可证,具体详情请查看项目仓库。