FirstCommit
This commit is contained in:
189
README.md
Normal file
189
README.md
Normal file
@@ -0,0 +1,189 @@
|
||||
# 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 文件处理库
|
||||
|
||||
## 许可证
|
||||
|
||||
本项目采用开源许可证,具体详情请查看项目仓库。
|
||||
Reference in New Issue
Block a user