proxies中节点重复

#5 · closed · 8 comments

View on GitHub ↗

Heporis

比如下面的筛选规则 生成的proxies依次是:hk,sgp,jp,us,hk,sgp,jp,us 预期结果应该是hk,sgp,jp,us 没有代码基础,不知道哪里出问题了,问chatgpt也没给我解决(保持文本顺序也是问的它,有用😅) 另外,一个group使用多个订阅链接来筛选,可以在一个url中识别多个连接吗?就是url: "url1", "url2"这种,现在只能识别第一个链接,需要为第二个链接再写一个筛选规则 ``` [ { name: "mySite", # 网站名称,仅用于日志输出 group: "国外媒体", # 目标 proxy-groups 的代理组名 url: "url1", # Clash 配置文件的订阅 URL exclusion: ["127.0.0.1", "1.1.1.1", "官网", "IPv6", "测试"], # 节点名称或地址包含这些关键词的节点会被丢弃 inclusion: ["hk"], # 仅采纳包含这些关键词的节点 dedup: True # 是否基于节点入口 IP 地址进行去重 }, { name: "mySite", # 网站名称,仅用于日志输出 group: "谷歌服务", # 目标 proxy-groups 的代理组名 url: "url1", # Clash 配置文件的订阅 URL exclusion: ["127.0.0.1", "1.1.1.1", "官网", "IPv6", "测试"], # 节点名称或地址包含这些关键词的节点会被丢弃 inclusion: ["sgp","jp","us"], # 仅采纳包含这些关键词的节点 dedup: True # 是否基于节点入口 IP 地址进行去重 }, { name: "mySite", # 网站名称,仅用于日志输出 group: "自动测速", # 目标 proxy-groups 的代理组名 url: "url1", # Clash 配置文件的订阅 URL exclusion: ["127.0.0.1", "1.1.1.1", "官网", "IPv6", "测试"], # 节点名称或地址包含这些关键词的节点会被丢弃 inclusion: ["hk","sgp","jp","us"], # 仅采纳包含这些关键词的节点 dedup: True # 是否基于节点入口 IP 地址进行去重 }, ] ```

Comments

nonPointer

> 生成的proxies依次是:hk,sgp,jp,us,hk,sgp,jp,us > 预期结果应该是hk,sgp,jp,us 这个预期结果是错误的。节点命名有用 flag emoji 的,有用英文缩写,有用 IATA code,还有用中文的。即使是不同落地 IP 的节点,也可以使用相同入口的中转。技术上可以使用 Cloudflare `cdn-cgi` 或者 `ip.sb` 的接口来判断 region,但是没有必要。 这个项目只是手动实现了 Clash 的 `proxy-providers` 的功能,并加入了节点过滤和去重。筛选规则是针对每个订阅链接的,所以你应该为每个链接写一个 `{}` object,而不是将 URL 塞到一起。

Heporis

我说的更具体一点, 假设我有一个订阅节点链接是url1,这个订阅链接只有5个节点如下:hk1、hk2、sgp1、jp1、us1,用上面的规则过滤之后,proxies中的节点依次如下:hk1、hk2、sgp1、jp1、us1、hk1、hk2、sgp1、jp1、us1。 就是说如果第三个规则取用的节点在第一个规则中已经取用过了,也不会被丢掉。 结果就是clash无法切换到这个配置,说xxx节点是一个重复的名字。 我觉得应该分两步,先执行全部的过滤规则,每个规则取用的节点添加到对应的group中,同时把每个过滤规则取用的节点都临时保存到一起,等所有过滤规则都执行完毕之后,再对这个临时列表进行去重处理,然后添加到proxies中。

nonPointer

项目的原始目的是将不同机场的节点塞到对应机场名的分组,手动将流媒体指向贵(节点优质)的分组,上网走便宜的分组。因此一个订阅链接只应对应一个 `{}` object。不要想复杂了。 对于你这个需求也很好解决:给 [L124](https://github.com/nonPointer/ClashHelper/blob/c70265b20dddddc81efcb90f713ada29234a2719/helper.py#L124) 对相同节点名的节点去重即可。

Heporis

好的,就是我不会写代码,能帮忙写个去重吗?😅

nonPointer

试试新版本

Heporis

可以了,非常感谢!可以把我提的那个保持文本顺序的PR合并吗?目前会打乱template.yaml的顺序,变成按字母排序了 ![image](https://github.com/nonPointer/ClashHelper/assets/51895154/330d7b93-6aeb-4b2c-8ba6-1f3b4ebb6a34)

nonPointer

想了下还是不 merge 吧,你可以将自己的 fork 改成 ruamel 自用。 yaml 是 Python 内置库,ruamel 得从 pip 下。没必要为这个 list 保序而引入一个第三方库,这不会影响 Clash 客户端的行为。

Heporis

好的