task.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package app
  2. import (
  3. "log"
  4. "sync"
  5. "time"
  6. "github.com/zu1k/proxypool/internal/database"
  7. "github.com/zu1k/proxypool/internal/cache"
  8. "github.com/zu1k/proxypool/pkg/provider"
  9. "github.com/zu1k/proxypool/pkg/proxy"
  10. )
  11. var location, _ = time.LoadLocation("PRC")
  12. func CrawlGo() {
  13. wg := &sync.WaitGroup{}
  14. var pc = make(chan proxy.Proxy)
  15. for _, g := range Getters {
  16. wg.Add(1)
  17. go g.Get2Chan(pc, wg)
  18. }
  19. proxies := cache.GetProxies("allproxies")
  20. go func() {
  21. wg.Wait()
  22. close(pc)
  23. }()
  24. for node := range pc {
  25. if node != nil {
  26. proxies = append(proxies, node)
  27. }
  28. }
  29. // 节点去重
  30. proxies = proxies.Deduplication()
  31. database.SaveProxyList(proxies)
  32. log.Println("CrawlGo node count:", len(proxies))
  33. proxies = provider.Clash{
  34. provider.Base{
  35. Proxies: &proxies,
  36. },
  37. }.CleanProxies()
  38. log.Println("CrawlGo cleaned node count:", len(proxies))
  39. proxies.NameAddCounrty().Sort().NameAddIndex().NameAddTG()
  40. log.Println("Proxy rename DONE!")
  41. cache.SetProxies("allproxies", proxies)
  42. cache.AllProxiesCount = proxies.Len()
  43. log.Println("AllProxiesCount:", cache.AllProxiesCount)
  44. cache.SSProxiesCount = proxies.TypeLen("ss")
  45. log.Println("SSProxiesCount:", cache.SSProxiesCount)
  46. cache.SSRProxiesCount = proxies.TypeLen("ssr")
  47. log.Println("SSRProxiesCount:", cache.SSRProxiesCount)
  48. cache.VmessProxiesCount = proxies.TypeLen("vmess")
  49. log.Println("VmessProxiesCount:", cache.VmessProxiesCount)
  50. cache.TrojanProxiesCount = proxies.TypeLen("trojan")
  51. log.Println("TrojanProxiesCount:", cache.TrojanProxiesCount)
  52. cache.LastCrawlTime = time.Now().In(location).Format("2006-01-02 15:04:05")
  53. // 可用性检测
  54. log.Println("Now proceed proxy health check...")
  55. proxies = proxy.CleanBadProxiesWithGrpool(proxies)
  56. log.Println("CrawlGo clash usable node count:", len(proxies))
  57. proxies.NameReIndex()
  58. cache.SetProxies("proxies", proxies)
  59. cache.UsefullProxiesCount = proxies.Len()
  60. cache.SetString("clashproxies", provider.Clash{
  61. provider.Base{
  62. Proxies: &proxies,
  63. },
  64. }.Provide())
  65. cache.SetString("surgeproxies", provider.Surge{
  66. provider.Base{
  67. Proxies: &proxies,
  68. },
  69. }.Provide())
  70. }