forked from dianhsu-official/cf-tool
/
list_contests.go
64 lines (54 loc) · 1.34 KB
/
list_contests.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
package sio_client
import (
"fmt"
"strings"
"github.com/Arapak/sio-tool/util"
"github.com/PuerkitoBio/goquery"
)
type ContestInfo struct {
Name string
Alias string
Subheader bool
}
func (c *SioClient) findContests(body []byte) (ret []ContestInfo, err error) {
doc, err := goquery.NewDocumentFromReader(strings.NewReader(string(body)))
if err != nil {
return
}
doc.Find("table tbody").First().Find("tr").Each(func(_ int, s *goquery.Selection) {
_, ok := s.Attr("class")
info := ContestInfo{}
if !ok && c.instanceClient == Staszic {
info.Subheader = true
info.Name = strings.TrimSpace(s.Find("a").First().Text())
} else {
info.Subheader = false
info.Name = strings.TrimSpace(s.Find("a").First().Text())
info.Alias = strings.TrimSpace(s.Find("td").First().Text())
}
ret = append(ret, info)
})
return
}
func (c *SioClient) ListContests() (problems []ContestInfo, perf util.Performance, err error) {
perf.StartFetching()
URL := c.host
if c.instanceClient == Mimuw {
URL = fmt.Sprintf("%v/c/oi30-1/contest", c.host)
}
body, err := util.GetBody(c.client, URL)
if err != nil {
return
}
perf.StopFetching()
perf.StartParsing()
if _, err = findUsername(body); err != nil {
return
}
contests, err := c.findContests(body)
if err != nil {
return
}
perf.StopParsing()
return contests, perf, nil
}