get_code.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. defer func() {
  13. log_helper.GetLogger().Infoln("End Get Code")
  14. }()
  15. log_helper.GetLogger().Infoln("Start Get Code...")
  16. browser, err := rod_helper.NewBrowser("", false)
  17. if err != nil {
  18. return "", err
  19. }
  20. defer func() {
  21. _ = browser.Close()
  22. }()
  23. page, err := browser.Page(proto.TargetCreateTarget{URL: codeUrl})
  24. if err != nil {
  25. return "", err
  26. }
  27. defer func() {
  28. _ = page.Close()
  29. }()
  30. err = page.WaitLoad()
  31. if err != nil {
  32. return "", err
  33. }
  34. htmlString, err := page.HTML()
  35. if err != nil {
  36. return "", err
  37. }
  38. code := ""
  39. var re = regexp.MustCompile(`(?m)>\d{6}<`)
  40. parts := re.FindAllString(htmlString, -1)
  41. if parts == nil || len(parts) <= 0 {
  42. return "", errors.New("code not found")
  43. } else {
  44. code = strings.ReplaceAll(parts[0], "<", "")
  45. code = strings.ReplaceAll(code, ">", "")
  46. }
  47. sEnc := b64.StdEncoding.EncodeToString([]byte(code))
  48. return sEnc, nil
  49. }