task.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package app
  2. import (
  3. "log"
  4. "math/rand"
  5. "strconv"
  6. "sync"
  7. "github.com/zu1k/proxypool/provider"
  8. "github.com/zu1k/proxypool/app/cache"
  9. "github.com/zu1k/proxypool/proxy"
  10. )
  11. func Crawl() {
  12. proxies := make([]proxy.Proxy, 0)
  13. for _, g := range Getters {
  14. proxies = append(proxies, g.Get()...)
  15. }
  16. proxies = append(proxies, cache.GetProxies()...)
  17. proxies = proxy.Deduplication(proxies)
  18. num := len(proxies)
  19. for i := 0; i < num; i++ {
  20. proxies[i].SetName(strconv.Itoa(rand.Int()))
  21. }
  22. log.Println("Crawl node count:", num)
  23. cache.SetProxies(proxies)
  24. cache.SetString("clashproxies", provider.Clash{Proxies: proxies}.Provide())
  25. }
  26. func CrawlGo() {
  27. wg := &sync.WaitGroup{}
  28. var pc = make(chan proxy.Proxy)
  29. for _, g := range Getters {
  30. go g.Get2Chan(pc, wg)
  31. }
  32. proxies := cache.GetProxies()
  33. go func() {
  34. wg.Wait()
  35. close(pc)
  36. }()
  37. for node := range pc {
  38. if node != nil {
  39. proxies = append(proxies, node)
  40. }
  41. }
  42. proxies = proxy.Deduplication(proxies)
  43. num := len(proxies)
  44. for i := 0; i < num; i++ {
  45. proxies[i].SetName(strconv.Itoa(rand.Int()))
  46. }
  47. log.Println("CrawlGo node count:", num)
  48. cache.SetProxies(proxies)
  49. cache.SetString("clashproxies", provider.Clash{Proxies: proxies}.Provide())
  50. }