get_code.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package backend
  2. import (
  3. b64 "encoding/base64"
  4. "errors"
  5. "github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
  6. "github.com/allanpk716/ChineseSubFinder/internal/pkg/rod_helper"
  7. "github.com/go-rod/rod/lib/proto"
  8. "regexp"
  9. "strings"
  10. )
  11. func GetCode(codeUrl string) (string, error) {
  12. log_helper.GetLogger().Infoln("Start Get Code...")
  13. browser, err := rod_helper.NewBrowser("", false)
  14. if err != nil {
  15. return "", err
  16. }
  17. defer func() {
  18. _ = browser.Close()
  19. }()
  20. page, err := browser.Page(proto.TargetCreateTarget{URL: codeUrl})
  21. if err != nil {
  22. return "", err
  23. }
  24. defer func() {
  25. _ = page.Close()
  26. }()
  27. err = page.WaitLoad()
  28. if err != nil {
  29. return "", err
  30. }
  31. htmlString, err := page.HTML()
  32. if err != nil {
  33. return "", err
  34. }
  35. code := ""
  36. var re = regexp.MustCompile(`(?m)>\d{6}<`)
  37. parts := re.FindAllString(htmlString, -1)
  38. if parts == nil || len(parts) <= 0 {
  39. return "", errors.New("code not found")
  40. } else {
  41. code = strings.ReplaceAll(parts[0], "<", "")
  42. code = strings.ReplaceAll(code, ">", "")
  43. }
  44. sEnc := b64.StdEncoding.EncodeToString([]byte(code))
  45. log_helper.GetLogger().Infoln("End Get Code")
  46. return sEnc, nil
  47. }