Files
proxypool/app/task.go
2020-08-18 19:07:52 +08:00

71 lines
1.7 KiB
Go

package app
import (
"fmt"
"io/ioutil"
"log"
"sync"
"github.com/zu1k/proxypool/app/cache"
"github.com/zu1k/proxypool/config"
"github.com/zu1k/proxypool/provider"
"github.com/zu1k/proxypool/proxy"
"github.com/zu1k/proxypool/tool"
"gopkg.in/yaml.v2"
)
var NeedFetchNewConfigFile = false
func CrawlGo() {
if NeedFetchNewConfigFile {
FetchNewConfigFileThenInit()
}
wg := &sync.WaitGroup{}
var pc = make(chan proxy.Proxy)
for _, g := range Getters {
wg.Add(1)
go g.Get2Chan(pc, wg)
}
proxies := cache.GetProxies("proxies")
go func() {
wg.Wait()
close(pc)
}()
for node := range pc {
if node != nil {
proxies = append(proxies, node)
}
}
// 节点去重
proxies = proxies.Deduplication()
log.Println("CrawlGo node count:", len(proxies))
proxies = provider.Clash{Proxies: proxies}.CleanProxies()
proxies.NameAddCounrty().Sort().NameAddIndex()
cache.SetProxies("allproxies", proxies)
// 可用性检测
proxies = proxy.CleanBadProxies(proxies)
log.Println("CrawlGo clash useable node count:", len(proxies))
proxies.NameAddCounrty().Sort().NameAddIndex()
cache.SetProxies("proxies", proxies)
cache.SetString("clashproxies", provider.Clash{Proxies: proxies}.Provide())
cache.SetString("surgeproxies", provider.Surge{Proxies: proxies}.Provide())
}
func FetchNewConfigFileThenInit() {
fmt.Println("fetch new config file...")
resp, err := tool.GetHttpClient().Get("https://raw.githubusercontent.com/zu1k/proxypool/master/source.yaml")
if err != nil {
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
err = yaml.Unmarshal(body, &config.SourceConfig)
if err != nil {
return
}
InitGetters(config.SourceConfig.Sources)
}