-
Notifications
You must be signed in to change notification settings - Fork 1
/
common.go
156 lines (114 loc) · 3.14 KB
/
common.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
package jw
import (
"errors"
"strconv"
"strings"
"github.com/PuerkitoBio/goquery"
"github.com/thinkeridea/go-extend/exunicode/exutf8"
)
// GetJwTime 获取当前教务时间
func (u *JwUser) GetJwTime() (jwTime JwTime, err error) {
body, err := u.GetBannerRpt()
if err != nil {
return
}
doc, err := goquery.NewDocumentFromReader(strings.NewReader(body))
if err != nil {
return
}
// 在线人数
onstrFull := doc.Find("span#onTimeNum").First().Text()
// 去掉缩进和空格
onstrq := strings.Replace(strings.Replace(strings.Replace(onstrFull, "\\t", "", -1), "\n", "", -1), "\t", "", -1)
// 去掉特殊的符号
onstrq = strings.Replace(onstrq, "\u00a0", "", -1)
// 截取一下
onlineNumstr := exutf8.RuneSubString(onstrq, 5, 10)
// 尝试转为整形
onlineNum, _ := strconv.Atoi(onlineNumstr)
jwTime.OnlineNum = uint(onlineNum)
rawData := doc.Find("span").Eq(1).Text()
// 对教务时间进行处理
// [2021年08月06日 星期五 2021-2022学年第一学期 [假期]]
jwtimeData := strings.Fields(rawData)
if len(jwtimeData) < 2 {
err = errors.New("fatl to get jwtime")
return
}
for i, subStr := range jwtimeData {
if i != len(jwTime.RawData)-1 {
jwTime.RawData += subStr + " "
} else {
jwTime.RawData += subStr
}
}
YearStr := exutf8.RuneSubString(jwtimeData[2], 0, 4)
YearNum, _ := strconv.Atoi(YearStr)
jwTime.Year = uint(YearNum)
if strings.Contains(jwtimeData[2], "一") {
jwTime.Term = 0
}
if strings.Contains(jwtimeData[2], "二") {
jwTime.Term = 1
}
if strings.Contains(jwtimeData[len(jwtimeData)-1], "假期") {
jwTime.IsVacation = true
} else {
// 周数处理
weekStr := strings.ReplaceAll(jwtimeData[3], "第", "")
weekStr = strings.ReplaceAll(weekStr, "周", "")
// 尝试转为整形
weekNum, _ := strconv.Atoi(weekStr)
jwTime.Week = uint(weekNum)
}
return
}
// GetClassID 获取班级ID
func (u *JwUser) GetClassID(name string) (id string, err error) {
idMap := make(map[string]string)
body, err := u.GetClassSelPage()
if err != nil {
return
}
doc, err := goquery.NewDocumentFromReader(strings.NewReader(body))
if err != nil {
return
}
sel := doc.Find("td#theXZBJ>select")
sel.Find("option").Each(func(i int, option *goquery.Selection) {
idMap[option.Text()] = option.AttrOr("value", "")
})
id = idMap[name]
if len(id) == 0 {
err = errors.New("not found class id")
}
return
}
// GetClassID 获取学生ID
func (u *JwUser) GetStuID(name string) (id string, err error) {
body, err := u.GetListXSRpt(name)
if err != nil {
return
}
if strings.Contains(body, "@") || !strings.Contains(body, "|") {
err = errors.New("not found student id")
return
}
id = body[0:12]
if len(id) == 0 {
err = errors.New("not found student id")
}
return
}
// 成绩排名参数构造
func (u *JwUser) XscjbmLeftRptToHidKC(body string) string {
doc, _ := goquery.NewDocumentFromReader(strings.NewReader(body))
hid_kc := `'TTTTTTTTTTTTTTTT'`
doc.Find("table#ID_Table>tbody>tr").Each(func(i int, tr *goquery.Selection) {
v, isExist := tr.Find("td>input").First().Attr("value")
if isExist {
hid_kc = hid_kc + "," + `'` + v + `'`
}
})
return hid_kc
}