()
| 14 | var location, _ = time.LoadLocation("PRC") |
| 15 | |
| 16 | func CrawlGo() { |
| 17 | wg := &sync.WaitGroup{} |
| 18 | var pc = make(chan proxy.Proxy) |
| 19 | for _, g := range Getters { |
| 20 | wg.Add(1) |
| 21 | go g.Get2Chan(pc, wg) |
| 22 | } |
| 23 | proxies := cache.GetProxies("allproxies") |
| 24 | proxies = append(proxies, database.GetAllProxies()...) |
| 25 | go func() { |
| 26 | wg.Wait() |
| 27 | close(pc) |
| 28 | }() |
| 29 | for node := range pc { |
| 30 | if node != nil { |
| 31 | proxies = append(proxies, node) |
| 32 | } |
| 33 | } |
| 34 | // 节点去重 |
| 35 | proxies = proxies.Deduplication() |
| 36 | log.Println("CrawlGo node count:", len(proxies)) |
| 37 | proxies = provider.Clash{ |
| 38 | provider.Base{ |
| 39 | Proxies: &proxies, |
| 40 | }, |
| 41 | }.CleanProxies() |
| 42 | log.Println("CrawlGo cleaned node count:", len(proxies)) |
| 43 | proxies.NameAddCounrty().Sort().NameAddIndex().NameAddTG() |
| 44 | log.Println("Proxy rename DONE!") |
| 45 | |
| 46 | // 全节点存储到数据库 |
| 47 | database.SaveProxyList(proxies) |
| 48 | |
| 49 | cache.SetProxies("allproxies", proxies) |
| 50 | cache.AllProxiesCount = proxies.Len() |
| 51 | log.Println("AllProxiesCount:", cache.AllProxiesCount) |
| 52 | cache.SSProxiesCount = proxies.TypeLen("ss") |
| 53 | log.Println("SSProxiesCount:", cache.SSProxiesCount) |
| 54 | cache.SSRProxiesCount = proxies.TypeLen("ssr") |
| 55 | log.Println("SSRProxiesCount:", cache.SSRProxiesCount) |
| 56 | cache.VmessProxiesCount = proxies.TypeLen("vmess") |
| 57 | log.Println("VmessProxiesCount:", cache.VmessProxiesCount) |
| 58 | cache.TrojanProxiesCount = proxies.TypeLen("trojan") |
| 59 | log.Println("TrojanProxiesCount:", cache.TrojanProxiesCount) |
| 60 | cache.LastCrawlTime = time.Now().In(location).Format("2006-01-02 15:04:05") |
| 61 | |
| 62 | // 可用性检测 |
| 63 | log.Println("Now proceed proxy health check...") |
| 64 | proxies = proxy.CleanBadProxiesWithGrpool(proxies) |
| 65 | log.Println("CrawlGo clash usable node count:", len(proxies)) |
| 66 | proxies.NameReIndex() |
| 67 | cache.SetProxies("proxies", proxies) |
| 68 | cache.UsefullProxiesCount = proxies.Len() |
| 69 | |
| 70 | cache.SetString("clashproxies", provider.Clash{ |
| 71 | provider.Base{ |
| 72 | Proxies: &proxies, |
| 73 | }, |
no test coverage detected