package provider import ( "errors" "fmt" "io" "net/http" "regexp" "strconv" "strings" "github.com/rs/zerolog/log" ) type Bato struct{} func (b *Bato) CleanUrlToSub(url string) string { trimmed := strings.TrimPrefix(url, "https://bato.to/title") trimmed = strings.Trim(trimmed, "/") return trimmed } func (b *Bato) GetImageList(html string) ([]string, error) { reg, err := regexp.Compile(` 300 { return "", errors.New("could not get html") } defer func(Body io.ReadCloser) { err := Body.Close() if err != nil { log.Error().Err(err).Msg("Could not close http body") } }(resp.Body) all, err := io.ReadAll(resp.Body) if err != nil { return "", err } h := string(all) return h, nil } func (b *Bato) GetNext(html string) (subUrl string, err error) { reg, err := regexp.Compile(`.*?.*?`) if err != nil { return nil, err } html, err := b.GetHtml(subUrl) if err != nil { return nil, err } subUrls = make([]string, 0) matches := reg.FindAllStringSubmatch(html, -1) for _, match := range matches { subUrls = append(subUrls, match[1]) } return subUrls, nil } func (b *Bato) GetThumbnail(subUrl string) (thumbnailUrl string, err error) { url := fmt.Sprintf("https://bato.to/title/%s", subUrl) resp, err := http.Get(url) // TODO: Testing for above 300 is dirty if err != nil && resp.StatusCode > 300 { return "", errors.New("could not get html") } defer func(Body io.ReadCloser) { err := Body.Close() if err != nil { fmt.Printf("Could not close body because: %v\n", err) } }(resp.Body) all, err := io.ReadAll(resp.Body) if err != nil { return "", err } h := string(all) reg, err := regexp.Compile(`