rl404/go-malscraper

View on GitHub
internal/parser/producer_magazine/producers.go

Summary

Maintainability
C
7 hrs
Test Coverage
package producermagazine

import (
    "regexp"
    "strings"

    "github.com/PuerkitoBio/goquery"
    "github.com/rl404/go-malscraper/model"
    "github.com/rl404/go-malscraper/pkg/utils"
)

type producers struct {
    area     *goquery.Selection
    cleanImg bool
    data     []model.ItemCount
}

// GetProducers to get anime producer/studio/licensor list.
func (p *parser) GetProducers(a *goquery.Selection) []model.ItemCount {
    v := producers{area: a, cleanImg: p.cleanImg}
    v.setDetail()
    return v.data
}

func (p *producers) setDetail() {
    producers := []model.ItemCount{}
    p.area.Find(".genre-list a").Each(func(i int, area *goquery.Selection) {
        producers = append(producers, model.ItemCount{
            ID:    p.getID(area),
            Name:  p.getName(area),
            Count: p.getCount(area),
        })
    })
    p.data = producers
}

func (p *producers) getID(area *goquery.Selection) int {
    link, _ := area.Attr("href")
    return utils.StrToNum(utils.GetValueFromSplit(link, "/", 3))
}

func (p *producers) getName(area *goquery.Selection) string {
    r := regexp.MustCompile(`\([0-9,-]+\)`)
    return strings.TrimSpace(r.ReplaceAllString(area.Text(), ""))
}

func (p *producers) getCount(area *goquery.Selection) int {
    r := regexp.MustCompile(`\([0-9,-]+\)`)
    count := r.FindString(area.Text())
    return utils.StrToNum(count[1 : len(count)-1])
}