forked from ronoaldo/swgoh
-
Notifications
You must be signed in to change notification settings - Fork 0
/
arena.go
63 lines (60 loc) · 1.86 KB
/
arena.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
package swgohgg
import (
"fmt"
"strings"
"time"
"github.com/PuerkitoBio/goquery"
)
// Arena returns basic information about the player Arena team.
// If authorized, attempts to fetch more information from character stats
func (c *Client) Arena() (team []*CharacterStats, lastUpdate time.Time, err error) {
url := fmt.Sprintf("https://swgoh.gg/u/%s/", c.shortLink)
if c.allyCode != "" {
url = fmt.Sprintf("https://swgoh.gg/p/%s/", c.allyCode)
}
doc, err := c.Get(url)
if err != nil {
return
}
doc.Find(".panel-body > p").Each(func(i int, s *goquery.Selection) {
text := strings.ToLower(s.Text())
if strings.Contains(text, "ally code") {
c.SetAllyCode(nonDigits.ReplaceAllString(text, ""))
}
if strings.HasPrefix(text, "guild ") && c.guildName == "" {
c.guildName = strings.TrimSpace(s.Text()[6:])
}
})
doc.Find(".panel-profile .panel-body h5.panel-title").Each(func(i int, s *goquery.Selection) {
c.playerName = strings.TrimSpace(s.Text())
})
order := make([]string, 0, 5)
basicStats := make(map[string]CharacterStats)
doc.Find(".current-rank-team").First().Find(".player-char-portrait").Each(func(i int, s *goquery.Selection) {
charName := s.AttrOr("title", "UNKOWN")
charBasicStats := CharacterStats{
Name: charName,
Level: atoi(s.Find(".char-portrait-full-level").Text()),
Stars: stars(s),
}
basicStats[charName] = charBasicStats
order = append(order, charName)
})
for _, name := range order {
basic := basicStats[name]
var stat *CharacterStats
stat, err = c.CharacterStats(name)
if err != nil {
return
}
if stat.GearLevel < 0 {
stat.Name = basic.Name
stat.Level = basic.GearLevel
stat.Stars = basic.Stars
}
team = append(team, stat)
}
timestamp := doc.Find(".user-last-updated .datetime").First().AttrOr("data-datetime", "0000-00-00T00:00:00Z")
lastUpdate, err = time.Parse(time.RFC3339, timestamp)
return
}