tmechecker.go 1012 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package processor
  2. import (
  3. "context"
  4. "log"
  5. "spider/internal/crawler"
  6. "spider/internal/model"
  7. )
  8. // TMeChecker filters dead TG accounts via HTTP t.me page scraping.
  9. // Free, unlimited, 100% accurate.
  10. type TMeChecker struct {
  11. validator *crawler.TMeValidator
  12. }
  13. // NewTMeChecker creates a new TMeChecker.
  14. func NewTMeChecker() *TMeChecker {
  15. return &TMeChecker{validator: crawler.NewTMeValidator()}
  16. }
  17. // Filter checks each raw merchant's tg_username against t.me.
  18. // Returns alive merchants; dead ones are returned separately with status="invalid".
  19. func (c *TMeChecker) Filter(ctx context.Context, raws []model.MerchantRaw) (alive []model.MerchantRaw, dead []model.MerchantRaw) {
  20. for _, raw := range raws {
  21. if ctx.Err() != nil {
  22. break
  23. }
  24. if raw.TgUsername == "" {
  25. alive = append(alive, raw)
  26. continue
  27. }
  28. if c.validator.IsAlive(ctx, raw.TgUsername) {
  29. alive = append(alive, raw)
  30. } else {
  31. log.Printf("[tmechecker] dead: @%s", raw.TgUsername)
  32. dead = append(dead, raw)
  33. }
  34. }
  35. return
  36. }