Skip to content
This repository has been archived by the owner on Jan 20, 2021. It is now read-only.
/ subscriber Public archive

Subscribe Config Convert Framework

License

Notifications You must be signed in to change notification settings

xjasonlyu/subscriber

Repository files navigation

Subscribe Config Convert Framework

subscriber是一个用Flask写的负责将机场订阅配置文件转换成自己需要的格式的(玩具)框架🤪

Why

目前很多机场都支持节点订阅,但是配置或多或少都有些死板,不易变通,而且作为一个强迫症怎么能忍受参差不齐的节点命名🌚

虽然已经有一些在线的订阅转换网站,但是缺点也很明显:不够灵活,自定义空间小,而且也可能存在安全风险

如果手改的话,节点多了基本会累死,而且不能及时更新订阅信息

所以,此玩具项目应运而生🙈

subscriber目前支持以clash的配置文件作为输入,使用jinja2作为配置模版引擎,支持二次转换成

  • Clash 配置文件
  • Surge 配置文件
  • 其他(用jinja2写模版就行)

Usage

使用非常简单,跑Docker里,需要HTTPS的话,用nginx或者caddy反代即可

docker pull xjasonlyu/subscriber

docker-compose示例

version: '3'
services:
  subscriber:
    image: xjasonlyu/subscriber:latest
    volumes:
      - /etc/subscriber:/config:ro
    restart: always
    network_mode: host
    container_name: subscriber

客户端添加订阅URL示例

  • Clash: http://yourserver/subscribe/clash?auth=your_auth_code
  • Surge: http://yourserver/subscribe/surge?auth=your_auth_code

Configuration

subscriber支持高度的自定义,通过配置模版几乎可以匹配任何的客户端

Subscriber Config

subscriber参考配置文件如下:

{
    "settings": {
        "cache": {
            "cache_type": "simple",
            "cache_ignore_errors": false,
            "cache_default_timeout": 300
        }
    },
    "subscriptions": {
        "_auth_01_": {
            "link": "https://example.com/config_01.yml",
            "parser": "N3RO",
            "template": "modules/n3ro.j2",
            "sort": "node.net,node.flag,id",
            "filter": "node.flag and type=='ss'",
            "interval": 86400,
            "extras": {}
        },
        "_auth_02_": {
            "link": "https://example.com/config_02.yml",
            "parser": "rixCloud",
            "template": "modules/rixcloud.j2",
            "sort": "node.attr,node.flag,id",
            "filter": "node.flag and type=='ss'",
            "interval": 259200,
            "extras": {}
        }
    },
    "ruleset": {
        "mapping": {
            "reject": "Reject.list"
        },
        "remotes": [
            "https://raw.githubusercontent.com/ConnersHua/Profiles/master/Surge/Ruleset",
            "https://raw.githubusercontent.com/rixCloud-Inc/rixCloud-Surge3_Rules/master"
        ]
    }
}

settings字段目前仅支持cache一项,配置与Flask-Caching相同,无视大小写

subscriptions字段里是每一个订阅的映射,key是your_auth_code,value具体配置如下:

  • link: 原机场订阅的clash格式链接(支持http|https|file协议)
  • parser: 指定的订阅转换器,参考subscribe/parser目录,自定义
  • template: jinja2模版,参考config/templates目录,自定义
  • sort: 节点排序规则,字段参考subscribe.filter::Proxy类的实现
  • filter: 节点过滤器,只有满足条件才会进一步转换,字段参考subscribe.filter::Proxy类的实现
  • interval: 配置更新间隔,仅Surge支持,可以忽略
  • extras: 额外的变量,方便jinja2模版的引用

ruleset字段,支持remotesmapping两个子字段,分别作为规则名映射和上游规则集URL

  • 示例URL: http://yourserver/ruleset/Apple.list
  • http://yourserver/ruleset/reject == http://yourserver/ruleset/Reject.list

Templates

这玩意儿用jinja2写模版,所以能随便折腾,所以前提是要会jinja2的语法,然后就随意配置了

具体参考config/templates目录下的demo

End

之所以说玩具,除了代码不到1000行以外,就是配置一点都不人性化了2333,不过一次配置完以后就舒服了Orz