Browse Source

splite source from config

zu1k 5 years ago
parent
commit
42035022c6
6 changed files with 65 additions and 46 deletions
  1. 2 2
      assets/html/index.html
  2. 6 11
      config/config.go
  3. 3 30
      config/config.yaml
  4. 8 0
      config/source.go
  5. 30 0
      config/source.yaml
  6. 16 3
      internal/app/getter.go

+ 2 - 2
assets/html/index.html

@@ -115,7 +115,7 @@
             <p>可用节点数量:{{ .useful_proxies_count }}</p>
             <p>最后更新时间:{{ .last_crawl_time }}</p>
             <br>
-            <h5><a href="/clash">Clash</a></h5>
+            <h4><a href="/clash">Clash</a></h4>
             <p>Clash配置文件:https://{{ .domain }}/clash/config <a
                         href="clash://install-config?url=https://{{ .domain }}/clash/config">一键导入</a></p>
             <p>Clash proxy-provider(Shadowrocket添加订阅方式可用):<a href="https://{{ .domain }}/clash/proxies">https://{{ .domain }}/clash/proxies</a>
@@ -123,7 +123,7 @@
             <p>筛选代理类型:https://{{ .domain }}/clash/proxies?type=ss,ssr,vmess</p>
             <p>筛选国家:https://{{ .domain }}/clash/proxies?c=HK,TW,US</p>
 			<br>
-			<h5><a href="/surge">Surge</a></h5>
+			<h4><a href="/surge">Surge</a></h4>
             <p>Surge配置文件:https://{{ .domain }}/surge/config <a
                         href="surge3:///install-config?url=https://{{ .domain }}/surge/config">一键导入</a></p>
             <p>Surge proxy list:<a href="https://{{ .domain }}/surge/proxies">https://{{ .domain }}/surge/proxies</a>

+ 6 - 11
config/config.go

@@ -12,16 +12,11 @@ import (
 
 var configFilePath = "config.yaml"
 
-type Source struct {
-	Type    string       `json:"type" yaml:"type"`
-	Options tool.Options `json:"options" yaml:"options"`
-}
-
 type ConfigOptions struct {
-	Domain  string   `json:"domain" yaml:"domain"`
-	CFEmail string   `json:"cf_email" yaml:"cf_email"`
-	CFKey   string   `json:"cf_key" yaml:"cf_key"`
-	Sources []Source `json:"sources" yaml:"sources"`
+	Domain      string   `json:"domain" yaml:"domain"`
+	CFEmail     string   `json:"cf_email" yaml:"cf_email"`
+	CFKey       string   `json:"cf_key" yaml:"cf_key"`
+	SourceFiles []string `json:"source-files" yaml:"source-files"`
 }
 
 // Config 配置
@@ -34,7 +29,7 @@ func Parse(path string) error {
 	} else {
 		configFilePath = path
 	}
-	fileData, err := readConfigFile(path)
+	fileData, err := ReadFile(path)
 	if err != nil {
 		return err
 	}
@@ -59,7 +54,7 @@ func Parse(path string) error {
 }
 
 // 从本地文件或者http链接读取配置文件内容
-func readConfigFile(path string) ([]byte, error) {
+func ReadFile(path string) ([]byte, error) {
 	if strings.HasPrefix(path, "http://") || strings.HasPrefix(path, "https://") {
 		resp, err := tool.GetHttpClient().Get(path)
 		if err != nil {

+ 3 - 30
config/config.yaml

@@ -1,33 +1,6 @@
-domain: proxy.tgbot.co
+domain: example.com
 cf_email: ""
 cf_key: ""
 sources:
-  # 模糊抓取订阅链接
-  - type: webfuzzsub
-    options:
-      url: https://raw.githubusercontent.com/du5/free/master/sub.list
-
-  # 订阅链接
-  - type: subscribe
-    options:
-      url: https://raw.githubusercontent.com/ssrsub/ssr/master/v2ray
-
-  # 网页模糊抓取
-  - type: webfuzz
-    options:
-      url: https://merlinblog.xyz/wiki/freess.html
-
-  # tg频道抓取
-  - type: tgchannel
-    options:
-      channel: ssrList
-      num: 200
-
-  # 翻墙党论坛抓取
-  - type: web-fanqiangdang-rss
-    options:
-      url: https://fanqiangdang.com/forum.php?mod=rss&fid=50&auth=0
-
-  # 某个网站抓取
-  - type: web-freessrxyz
-    options:
+  - ./source.yaml
+  - https://example.com/source.yaml

+ 8 - 0
config/source.go

@@ -0,0 +1,8 @@
+package config
+
+import "github.com/zu1k/proxypool/pkg/tool"
+
+type Source struct {
+	Type    string       `json:"type" yaml:"type"`
+	Options tool.Options `json:"options" yaml:"options"`
+}

+ 30 - 0
config/source.yaml

@@ -0,0 +1,30 @@
+sources:
+  # 模糊抓取订阅链接
+  - type: webfuzzsub
+    options:
+      url: https://raw.githubusercontent.com/du5/free/master/sub.list
+
+  # 订阅链接
+  - type: subscribe
+    options:
+      url: https://raw.githubusercontent.com/ssrsub/ssr/master/v2ray
+
+  # 网页模糊抓取
+  - type: webfuzz
+    options:
+      url: https://merlinblog.xyz/wiki/freess.html
+
+  # tg频道抓取
+  - type: tgchannel
+    options:
+      channel: ssrList
+      num: 200
+
+  # 翻墙党论坛抓取
+  - type: web-fanqiangdang-rss
+    options:
+      url: https://fanqiangdang.com/forum.php?mod=rss&fid=50&auth=0
+
+  # 某个网站抓取
+  - type: web-freessrxyz
+    options:

+ 16 - 3
internal/app/getter.go

@@ -4,6 +4,8 @@ import (
 	"errors"
 	"fmt"
 
+	"github.com/ghodss/yaml"
+
 	"github.com/zu1k/proxypool/config"
 	"github.com/zu1k/proxypool/pkg/getter"
 )
@@ -15,7 +17,7 @@ func InitConfigAndGetters(path string) (err error) {
 	if err != nil {
 		return
 	}
-	if s := config.Config.Sources; len(s) == 0 {
+	if s := config.Config.SourceFiles; len(s) == 0 {
 		return errors.New("no sources")
 	} else {
 		initGetters(s)
@@ -23,9 +25,20 @@ func InitConfigAndGetters(path string) (err error) {
 	return
 }
 
-func initGetters(sources []config.Source) {
+func initGetters(sourceFiles []string) {
 	Getters = make([]getter.Getter, 0)
-	for _, source := range sources {
+	for _, path := range sourceFiles {
+		source := config.Source{}
+		data, err := config.ReadFile(path)
+		if err != nil {
+			fmt.Errorf("Init SourceFile Error: %s\n", err.Error())
+			continue
+		}
+		err = yaml.Unmarshal(data, &source)
+		if err != nil {
+			fmt.Errorf("Init SourceFile Error: %s\n", err.Error())
+			continue
+		}
 		g, err := getter.NewGetter(source.Type, source.Options)
 		if err == nil && g != nil {
 			Getters = append(Getters, g)