189 lines
5.0 KiB
Markdown
189 lines
5.0 KiB
Markdown
# 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 文件处理库
|
||
|
||
## 许可证
|
||
|
||
本项目采用开源许可证,具体详情请查看项目仓库。 |