This repository has been archived by the owner on Sep 22, 2021. It is now read-only.
/
top_manga.go
88 lines (74 loc) · 2.59 KB
/
top_manga.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package top
import (
"strings"
"github.com/PuerkitoBio/goquery"
"github.com/rl404/go-malscraper/model"
"github.com/rl404/go-malscraper/pkg/utils"
)
type manga struct {
area *goquery.Selection
cleanImg bool
data []model.TopManga
}
// GetManga to get top manga list.
func (p *parser) GetManga(a *goquery.Selection) []model.TopManga {
v := manga{area: a, cleanImg: p.cleanImg}
v.setDetail()
return v.data
}
func (m *manga) setDetail() {
topList := []model.TopManga{}
m.area.Find("table").Find("tr.ranking-list").Each(func(j int, eachTop *goquery.Selection) {
nameArea := eachTop.Find("td .detail")
infoArea, _ := nameArea.Find("div.information").Html()
parsedInfo := strings.Split(infoArea, "<br/>")
topList = append(topList, model.TopManga{
Rank: m.getRank(eachTop),
Image: m.getImage(eachTop),
ID: m.getID(nameArea),
Title: m.getTitle(nameArea),
Type: m.getType(parsedInfo),
Volume: m.getEpCh(parsedInfo),
StartDate: m.getDate(parsedInfo, 0),
EndDate: m.getDate(parsedInfo, 1),
Member: m.getMember(parsedInfo),
Score: m.getScore(eachTop),
})
})
m.data = topList
}
func (m *manga) getRank(eachTop *goquery.Selection) int {
return utils.StrToNum(eachTop.Find("td").First().Find("span").Text())
}
func (m *manga) getImage(eachTop *goquery.Selection) string {
image, _ := eachTop.Find("td:nth-of-type(2) a img").Attr("data-src")
return utils.URLCleaner(image, "image", m.cleanImg)
}
func (m *manga) getID(nameArea *goquery.Selection) int {
id, _ := nameArea.Find("div").First().Attr("id")
return utils.StrToNum(strings.Replace(id, "area", "", -1))
}
func (m *manga) getTitle(nameArea *goquery.Selection) string {
return nameArea.Find("a").First().Text()
}
func (m *manga) getType(parsedInfo []string) string {
return strings.Split(strings.TrimSpace(parsedInfo[0]), " ")[0]
}
func (m *manga) getEpCh(parsedInfo []string) int {
splitEpCh := strings.Split(strings.TrimSpace(parsedInfo[0]), " ")
return utils.StrToNum(splitEpCh[1][1:])
}
func (m *manga) getDate(parsedInfo []string, t int) model.Date {
splitDate := strings.Split(strings.TrimSpace(parsedInfo[1]), "-")
y1, m1, d1 := utils.StrToDate(splitDate[t])
return model.Date{Year: y1, Month: m1, Day: d1}
}
func (m *manga) getMember(parsedInfo []string) int {
member := strings.TrimSpace(parsedInfo[2])
member = strings.Replace(member, "members", "", -1)
member = strings.Replace(member, "favorites", "", -1)
return utils.StrToNum(member)
}
func (m *manga) getScore(eachTop *goquery.Selection) float64 {
return utils.StrToFloat(eachTop.Find("td:nth-of-type(3)").Text())
}