Commit 40923f7d authored by Junhiee's avatar Junhiee

gdhsxy

parents
Pipeline #4272 failed with stages
module gdhsxy
go 1.21.2
package hsxy
type Publish struct {
}
\ No newline at end of file
package hsxy
import (
"encoding/json"
"fmt"
"gdhsxy/utils"
"net/http"
"net/url"
"regexp"
"strings"
)
var client *http.Client
func init() {
proxyURL, err := url.Parse("http://192.168.31.40:7890")
if err != nil {
fmt.Println(err)
}
transport := &http.Transport{
// 设置其他参数
Proxy: http.ProxyURL(proxyURL),
}
client = &http.Client{
Transport: transport,
}
}
// 厚德楼时间表
const (
HDL_1 string = "8:20-9:05"
HDL_2 string = "9:10-9:55"
HDL_3 string = "10:25-11:10"
HDL_4 string = "11:15-12:00"
HDL_5 string = "14:00-14:45"
HDL_6 string = "14:50-15:35"
HDL_7 string = "16:00-16:45"
HDL_8 string = "16:50-17:35"
HDL_9 string = "18:45-19:30"
HDL_10 string = "19:40-20:25"
HDL_11 string = "20:35-21:20"
)
type HSXY interface {
Parse(string) *Schedule
Json() ([]byte, error)
Html(string)
Updata() (bool, error)
}
type Schedule struct {
name string
teacher string
time string
date string
addr string
}
func (s *Schedule) Parse(schedule map[string]string) *Schedule {
return &Schedule{
name: schedule["课程名称"],
teacher: schedule["教师"],
time: schedule["时间"],
date: schedule["周次小节"],
addr: schedule["地点"],
}
}
func (s *Schedule) Json() ([]byte, error) {
return json.Marshal(&s)
}
func (s *Schedule) Html(data string) (html string) {
return html
}
func (s *Schedule) Updata() (ok bool, err error) {
return ok, err
}
func parseURL(base_url string, params map[string]string) string {
param := url.Values{}
for key, value := range params {
param.Add(key, value)
}
uri := base_url + "?" + param.Encode()
return uri
}
func addHeaders(req *http.Request, headers map[string]string) {
for key, value := range headers {
req.Header.Add(key, value)
}
}
func BuildRequest(base_url string) *http.Request {
// base_url := "http://jwxt.gdhsc.edu.cn/jsxsd/framework/mainV_index_loadkb.htmlx"
params := map[string]string{
"xnxqid": "2023-2024-1", // 学年
"rq": "2023-10-01", // 周次
"xswk": "false", // 选课网址
"sjmsValue": "58B5870A5A8E431C95DA33D78BFAF1A8", // 非必要
}
headers := map[string]string{
"Accept": "text/html, */*; q=0.01",
"Accept-Language": "en,zh;q=0.9,zh-CN;q=0.8,zh-TW;q=0.7",
"Cookie": "bzb_jsxsd=2D4BFEF24DD19538DA4FB5BD356181B9; SERVERID=123;",
"Proxy-Connection": "keep-alive",
"Referer": "http://jwxt.gdhsc.edu.cn/jsxsd/framework/xsMainV_new.htmlx?t1=1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
}
uri := parseURL(base_url, params)
req, err := http.NewRequest("GET", uri, nil)
if err != nil {
fmt.Println(err)
}
addHeaders(req, headers)
return req
}
func Fetch(req *http.Request) (*http.Response, error) {
resp, err := client.Do(req)
return resp, err
}
func RawParse(html string) []string {
re := regexp.MustCompile(`(?s)<tr align="center">(.*?)</tr>`)
matches := re.FindAllString(html, -1)
// 匹配字段
nameCompile := regexp.MustCompile(`<p>([^<]+)</p><div class='tch-name'>`)
teacherCompile := regexp.MustCompile(`</p><p>(.*?)</p><span class='text'>`)
dateCompile := regexp.MustCompile(`<span class='text'>(.*?)</span></span>`)
addrCompile := regexp.MustCompile(`<img src='/jsxsd/assets_v1/images/item1.png'>(.*?)</span><span>`)
weekCompile := regexp.MustCompile(`<img src='/jsxsd/assets_v1/images/item3.png'>(.*?)</span></div><span style='display:none;' name='wkxx'>`)
var result []string
for _, matche := range matches {
nameTemp := nameCompile.FindAllStringSubmatch(matche, -1)
teacherTemp := teacherCompile.FindAllStringSubmatch(matche, -1)
dateTemp := dateCompile.FindAllStringSubmatch(matche, -1)
addrTemp := addrCompile.FindAllStringSubmatch(matche, -1)
weekTemp := weekCompile.FindAllStringSubmatch(matche, -1)
if len(nameTemp) > 1 {
for i := 0; i < len(nameTemp); i++ {
result = append(
result,
nameTemp[i][1],
teacherTemp[i][1],
dateTemp[i][1],
addrTemp[i][1],
weekTemp[i][1],
)
}
}
}
return result
}
func ToMap() (result map[string][]map[string]string) {
var sTemp []string
var resTemp []map[string]string
var mTemp map[string]string
data, err := utils.ReadFile("./resource/schedule.html")
if err != nil {
fmt.Println(err)
}
sechdule := RawParse(string(data))
result = make(map[string][]map[string]string)
var time string
const key = "sch"
for i := 0; i <= len(sechdule); i++ {
if i%5 == 0 && i != 0 {
name := sTemp[0]
teacher := strings.Split(sTemp[1], ":")[1]
date := strings.Split(sTemp[4], " ")[1] + " " + sTemp[2]
addr := sTemp[3]
strs := strings.Split(sTemp[2], " ")[0]
switch strs {
case "01~02小节":
time = strings.Split(HDL_1, "-")[0] + "-" + strings.Split(HDL_2, "-")[1]
case "03~04小节":
time = strings.Split(HDL_3, "-")[0] + "-" + strings.Split(HDL_4, "-")[1]
case "05~06小节":
time = strings.Split(HDL_5, "-")[0] + "-" + strings.Split(HDL_6, "-")[1]
case "07~08小节":
time = strings.Split(HDL_7, "-")[0] + "-" + strings.Split(HDL_8, "-")[1]
case "09~10~11小节":
time = strings.Split(HDL_9, "-")[0] + "-" + strings.Split(HDL_11, "-")[1]
}
mTemp = map[string]string{
"课程名称": name,
"教师": teacher,
"时间": time,
"周次小节": date,
"地点": addr,
}
resTemp = append(resTemp, mTemp)
sTemp = []string{}
}
if i != 65 {
sTemp = append(sTemp, sechdule[i])
}
}
result[key] = resTemp
return result
}
package main
import (
"fmt"
"gdhsxy/hsxy"
)
func main() {
// TODO 初始化课程表登录信息 - 持久化
s := new(hsxy.Schedule)
schMap := hsxy.ToMap()["sch"]
fmt.Println(len(schMap))
for _, sch := range schMap {
result := s.Parse(sch)
fmt.Println(result)
}
}
<style type="text/css">
.time-color {
height: 2rem;
width: 100%;
}
.time-color ul {
display: flex;
align-items: center;
height: 50%;
padding-left: 1rem;
}
.time-color ul li {
display: flex;
justify-content: center;
align-items: center;
font-family: MicrosoftYaHei;
font-size: 0.75rem;
color: #5f727f;
letter-spacing: 0;
line-height: 12px;
margin-right: 2rem;
}
.time-color ul li span {
display: inline-block;
width: 1rem;
height: 1rem;
border-radius: 10px;
margin-right: 0.25rem;
}
</style>
<div class="time-color">
<ul>
<li> <span style=" background-color: rgb(251, 194, 194);"></span>必修 </li>
<li> <span style=" background-color: rgb(205, 221, 252);"></span>限选 </li>
<li> <span style=" background-color: rgb(190, 237, 242);"></span>任选 </li>
<li> <span style=" background-color: rgb(252, 217, 181);"></span>公选 </li>
<li> <span style=" background-color: rgb(200, 198, 246);"></span>选修 </li>
<li> <span style=" background-color: rgb(247, 247, 248);"></span>其它 </li>
</ul>
</ul>
</div>
<table border="0" cellspacing="0" cellpadding="0">
<thead>
<tr align="center">
<th style="width: 10%;">周/节次</th>
<th style="width: 12%;">星期一</th>
<th style="width: 12%;">星期二</th>
<th style="width: 12%;">星期三</th>
<th style="width: 12%;">星期四</th>
<th style="width: 12%;">星期五</th>
<th style="width: 12%;">星期六</th>
<th style="width: 12%;">星期日</th>
</tr>
</thead>
<tbody>
<tr align="center">
<td>第一二节
<br>(01,02小节)
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box'
style='background-color: rgb(251, 194, 194);'>
<p>Pytho...</p>
<p>教师:钟广玲</p><span class='text'>01~02小节 第15周</span>
</span>
<div class='item-box'>
<p>Python程序设计</p>
<div class='tch-name'><span>学分:3</span><span>01~02节</span></div>
<div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼C-厚德楼C303大金融实验室</span><span><img
src='/jsxsd/assets_v1/images/item3.png'>第15周 星期一</span></div><span style='display:none;'
name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241002763' width=120 /></span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>
<div>链接:</div>
</span>
</div>
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box'
style='background-color: rgb(200, 198, 246);'>
<p>Web前端...</p>
<p>教师:操心慧</p><span class='text'>01~02小节 第15周</span>
</span>
<div class='item-box'>
<p>Web前端技术</p>
<div class='tch-name'><span>学分:3</span><span>01~02节</span></div>
<div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼A-厚德楼A204((实验室)</span><span><img
src='/jsxsd/assets_v1/images/item3.png'>第15周 星期二</span></div><span style='display:none;'
name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241002769' width=120 /></span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>
<div>链接:</div>
</span>
</div>
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box'
style='background-color: rgb(251, 194, 194);'>
<p>程序设计课...</p>
<p>教师:鲁健恒</p><span class='text'>01~02小节 第15周</span>
</span>
<div class='item-box'>
<p>程序设计课程设计</p>
<div class='tch-name'><span>学分:1</span><span>01~02节</span></div>
<div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼A-厚德楼A502(会计电算化2)</span><span><img
src='/jsxsd/assets_v1/images/item3.png'>第15周 星期三</span></div><span style='display:none;'
name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241003015' width=120 /></span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>
<div>链接:</div>
</span>
</div>
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box'
style='background-color: rgb(200, 198, 246);'>
<p>团队激励与...</p>
<p>教师:张俊</p><span class='text'>01~02小节 第15周</span>
</span>
<div class='item-box'>
<p>团队激励与沟通</p>
<div class='tch-name'><span>学分:2</span><span>01~02节</span></div>
<div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼C-厚德楼C310</span><span><img
src='/jsxsd/assets_v1/images/item3.png'>第15周 星期四</span></div><span style='display:none;'
name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241006281' width=120 /></span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>
<div>链接:</div>
</span>
</div>
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
</tr>
<tr align="center">
<td>第三四节
<br>(03,04小节)
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box'
style='background-color: rgb(251, 194, 194);'>
<p>软件系统设...</p>
<p>教师:程雪平</p><span class='text'>03~04小节 第15周</span>
</span>
<div class='item-box'>
<p>软件系统设计与体系结构</p>
<div class='tch-name'><span>学分:3</span><span>03~04节</span></div>
<div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼C-厚德楼C311</span><span><img
src='/jsxsd/assets_v1/images/item3.png'>第15周 星期一</span></div><span style='display:none;'
name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241002766' width=120 /></span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>
<div>链接:</div>
</span>
</div>
</td>
<td align="left">
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box'
style='background-color: rgb(251, 194, 194);'>
<p>Pytho...</p>
<p>教师:钟广玲</p><span class='text'>03~04小节 第15周</span>
</span>
<div class='item-box'>
<p>Python程序设计</p>
<div class='tch-name'><span>学分:3</span><span>03~04节</span></div>
<div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼-厚德楼B211(实验室)</span><span><img
src='/jsxsd/assets_v1/images/item3.png'>第15周 星期三</span></div><span style='display:none;'
name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241002763' width=120 /></span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>
<div>链接:</div>
</span>
</div>
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
</tr>
<tr align="center">
<td>第五六节
<br>(05,06小节)
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box'
style='background-color: rgb(251, 194, 194);'>
<p>中国近现代...</p>
<p>教师:李婷</p><span class='text'>05~06小节 第15周</span>
</span>
<div class='item-box'>
<p>中国近现代史纲要</p>
<div class='tch-name'><span>学分:3</span><span>05~06节</span></div>
<div><span><img src='/jsxsd/assets_v1/images/item1.png'>励志楼B-励志楼B104</span><span><img
src='/jsxsd/assets_v1/images/item3.png'>第15周 星期一</span></div><span style='display:none;'
name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241000612' width=120 /></span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>
<div>链接:</div>
</span>
</div>
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box'
style='background-color: rgb(251, 194, 194);'>
<p>软件系统设...</p>
<p>教师:程雪平</p><span class='text'>05~06小节 第15周</span>
</span>
<div class='item-box'>
<p>软件系统设计与体系结构</p>
<div class='tch-name'><span>学分:3</span><span>05~06节</span></div>
<div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼C-厚德楼C403实验室</span><span><img
src='/jsxsd/assets_v1/images/item3.png'>第15周 星期二</span></div><span style='display:none;'
name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241002766' width=120 /></span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>
<div>链接:</div>
</span>
</div>
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box'
style='background-color: rgb(251, 194, 194);'>
<p>中国近现代...</p>
<p>教师:李婷</p><span class='text'>05~06小节 第15周</span>
</span>
<div class='item-box'>
<p>中国近现代史纲要</p>
<div class='tch-name'><span>学分:3</span><span>05~06节</span></div>
<div><span><img src='/jsxsd/assets_v1/images/item1.png'>励志楼C-励志楼C101</span><span><img
src='/jsxsd/assets_v1/images/item3.png'>第15周 星期三</span></div><span style='display:none;'
name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241000612' width=120 /></span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>
<div>链接:</div>
</span>
</div>
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
</tr>
<tr align="center">
<td>第七八节
<br>(07,08小节)
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box'
style='background-color: rgb(251, 194, 194);'>
<p>创业管理</p>
<p>教师:谢根仁</p><span class='text'>07~08小节 第15周</span>
</span>
<div class='item-box'>
<p>创业管理</p>
<div class='tch-name'><span>学分:2</span><span>07~08节</span></div>
<div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼C-厚德楼C208</span><span><img
src='/jsxsd/assets_v1/images/item3.png'>第15周 星期一</span></div><span style='display:none;'
name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241006904' width=120 /></span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>
<div>链接:</div>
</span>
</div>
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box'
style='background-color: rgb(251, 194, 194);'>
<p>程序设计课...</p>
<p>教师:鲁健恒</p><span class='text'>07~08小节 第15周</span>
</span>
<div class='item-box'>
<p>程序设计课程设计</p>
<div class='tch-name'><span>学分:1</span><span>07~08节</span></div>
<div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼-厚德楼B406</span><span><img
src='/jsxsd/assets_v1/images/item3.png'>第15周 星期二</span></div><span style='display:none;'
name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241003015' width=120 /></span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>
<div>链接:</div>
</span>
</div>
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box'
style='background-color: rgb(251, 194, 194);'>
<p>数据库系统...</p>
<p>教师:陈霸氙</p><span class='text'>07~08小节 第15周</span>
</span>
<div class='item-box'>
<p>数据库系统课程设计</p>
<div class='tch-name'><span>学分:1</span><span>07~08节</span></div>
<div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼A-厚德楼A503(手工模拟实训室1)</span><span><img
src='/jsxsd/assets_v1/images/item3.png'>第15周 星期三</span></div><span style='display:none;'
name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241003018' width=120 /></span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>
<div>链接:</div>
</span>
</div>
</td>
<td align="left">
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box'
style='background-color: rgb(251, 194, 194);'>
<p>数据库系统...</p>
<p>教师:陈霸氙</p><span class='text'>07~08小节 第15周</span>
</span>
<div class='item-box'>
<p>数据库系统课程设计</p>
<div class='tch-name'><span>学分:1</span><span>07~08节</span></div>
<div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼A-厚德楼A503(手工模拟实训室1)</span><span><img
src='/jsxsd/assets_v1/images/item3.png'>第15周 星期五</span></div><span style='display:none;'
name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241003018' width=120 /></span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span
style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>
<div>链接:</div>
</span>
</div>
</td>
<td align="left">
</td>
<td align="left">
</td>
</tr>
<tr align="center">
<td>第九十十一节
<br>(09,10,11小节)
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
</tr>
<tr align="center">
<td>中午
<br>(12,13小节)
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
</tr>
<tr height="30">
<td align="center">备注&nbsp;&nbsp;</td>
<td colspan="7" style="color: red;" style="text-align:left;">&nbsp;影视鉴赏(网络) 陈旭光 4-18周;数据结构与算法(C语言) 1-18周;
</td>
</tr>
</tbody>
</table>
<style>
#tooltip {
position: absolute;
z-index: 9999;
display: none;
padding: 4px 8px;
border: 1px solid rgba(255, 255, 255, 0.25);
border-radius: 3px;
background-color: #333333;
filter: alpha(Opacity=80);
opacity: 0.8;
color: #fff;
text-align: left;
font-size: 16px;
}
#tooltip:before {
position: absolute;
top: -6px;
left: 15px;
width: 0;
height: 0;
border: 6px dashed #333333;
border-top: 0;
color: #fff;
content: ' ';
line-height: 0;
border-bottom-style: solid;
border-left-color: transparent;
border-right-color: transparent;
}
</style>
<script type="text/javascript">
showwk(false);
function showwk(flag) {
if (flag) {//显示网课
$("span[name='wkxx']").show();
} else {
$("span[name='wkxx']").hide();
}
}
$("#li_showWeek").html("<span class=\"main_text main_color\">第15周</span>/20周");
$(function () {
var x = -15;//title显示层x轴偏移量
var y = 30;//title显示层y轴偏移量
$("p").mouseover(function (e) {//
// 对所有td元素增加鼠标移入移出事件 //edit by wangwei 2018.10.31 此处修改为对所有P标签增加移入移出事件
this.myTitle = this.title;
this.title = "";
if (this.myTitle != "") {
var tooltip = "<div id='tooltip'>" + this.myTitle + "</div>"; //创建DIV元素
$("body").append(tooltip); //追加到文档中
$("#tooltip").css({ "top": (e.pageY + y) + "px", "left": (e.pageX + x) + "px" }).show(); //设置X Y坐标, 并且显示
}
}).mouseout(function () {
this.title = this.myTitle;
$("#tooltip").remove(); //移除
}).mousemove(function (e) {
$("#tooltip").css({ "top": (e.pageY + y) + "px", "left": (e.pageX + x) + "px" });
})
})
// 课表弹窗
function kbtc(t) {
t.nextSibling.style.display = "flex";
}
function kbot(t) {
t.nextSibling.style.display = "none";
}
function openWindow(name) {
var iWidth = 1100; //弹出窗口的宽度;
var iHeight = 550; //弹出窗口的高度;
var iTop = (window.screen.availHeight - 30 - iHeight) / 2; //得到窗口的垂直位置;
var iLeft = (window.screen.availWidth - 10 - iWidth) / 2; //得到窗口的水平位置;
window.open(name, name, "height=" + iHeight + ", width=" + iWidth + ", top=" + iTop + ", left=" + iLeft + ",toolbar=no, menubar=no, scrollbars=yes,resizable=yes,location=no, status=no");
}
</script>
\ No newline at end of file
<style type="text/css">
.time-color {
height: 2rem;
width: 100%;
}
.time-color ul {
display: flex;
align-items: center;
height: 50%;
padding-left: 1rem;
}
.time-color ul li {
display: flex;
justify-content: center;
align-items: center;
font-family: MicrosoftYaHei;
font-size: 0.75rem;
color: #5f727f;
letter-spacing: 0;
line-height: 12px;
margin-right: 2rem;
}
.time-color ul li span {
display: inline-block;
width: 1rem;
height: 1rem;
border-radius: 10px;
margin-right: 0.25rem;
}
</style>
<div class="time-color">
<ul >
<li> <span style=" background-color: rgb(251, 194, 194);"></span>必修 </li>
<li> <span style=" background-color: rgb(205, 221, 252);"></span>限选 </li>
<li> <span style=" background-color: rgb(190, 237, 242);"></span>任选 </li>
<li> <span style=" background-color: rgb(252, 217, 181);"></span>公选 </li>
<li> <span style=" background-color: rgb(200, 198, 246);"></span>选修 </li>
<li> <span style=" background-color: rgb(247, 247, 248);"></span>其它 </li>
</ul>
</ul>
</div>
<table border="0" cellspacing="0" cellpadding="0" >
<thead>
<tr align="center">
<th style="width: 10%;">周/节次</th>
<th style="width: 12%;">星期一</th>
<th style="width: 12%;">星期二</th>
<th style="width: 12%;">星期三</th>
<th style="width: 12%;">星期四</th>
<th style="width: 12%;">星期五</th>
<th style="width: 12%;">星期六</th>
<th style="width: 12%;">星期日</th>
</tr>
</thead>
<tbody>
<tr align="center">
<td>第一二节
<br>(01,02小节)
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box' style='background-color: rgb(251, 194, 194);'><p>Pytho...</p><p>教师:钟广玲</p><span class='text'>01~02小节 第15周</span></span><div class='item-box' ><p>Python程序设计</p><div class='tch-name'><span>学分:3</span><span>01~02节</span></div><div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼C-厚德楼C303大金融实验室</span><span><img src='/jsxsd/assets_v1/images/item3.png'>第15周 星期一</span></div><span style='display:none;' name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241002763' width=120/></span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'><div>链接:</div></span></div>
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box' style='background-color: rgb(200, 198, 246);'><p>Web前端...</p><p>教师:操心慧</p><span class='text'>01~02小节 第15周</span></span><div class='item-box' ><p>Web前端技术</p><div class='tch-name'><span>学分:3</span><span>01~02节</span></div><div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼A-厚德楼A204((实验室)</span><span><img src='/jsxsd/assets_v1/images/item3.png'>第15周 星期二</span></div><span style='display:none;' name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241002769' width=120/></span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'><div>链接:</div></span></div>
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box' style='background-color: rgb(251, 194, 194);'><p>程序设计课...</p><p>教师:鲁健恒</p><span class='text'>01~02小节 第15周</span></span><div class='item-box' ><p>程序设计课程设计</p><div class='tch-name'><span>学分:1</span><span>01~02节</span></div><div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼A-厚德楼A502(会计电算化2)</span><span><img src='/jsxsd/assets_v1/images/item3.png'>第15周 星期三</span></div><span style='display:none;' name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241003015' width=120/></span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'><div>链接:</div></span></div>
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box' style='background-color: rgb(200, 198, 246);'><p>团队激励与...</p><p>教师:张俊</p><span class='text'>01~02小节 第15周</span></span><div class='item-box' ><p>团队激励与沟通</p><div class='tch-name'><span>学分:2</span><span>01~02节</span></div><div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼C-厚德楼C310</span><span><img src='/jsxsd/assets_v1/images/item3.png'>第15周 星期四</span></div><span style='display:none;' name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241006281' width=120/></span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'><div>链接:</div></span></div>
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
</tr>
<tr align="center">
<td>第三四节
<br>(03,04小节)
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box' style='background-color: rgb(251, 194, 194);'><p>软件系统设...</p><p>教师:程雪平</p><span class='text'>03~04小节 第15周</span></span><div class='item-box' ><p>软件系统设计与体系结构</p><div class='tch-name'><span>学分:3</span><span>03~04节</span></div><div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼C-厚德楼C311</span><span><img src='/jsxsd/assets_v1/images/item3.png'>第15周 星期一</span></div><span style='display:none;' name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241002766' width=120/></span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'><div>链接:</div></span></div>
</td>
<td align="left">
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box' style='background-color: rgb(251, 194, 194);'><p>Pytho...</p><p>教师:钟广玲</p><span class='text'>03~04小节 第15周</span></span><div class='item-box' ><p>Python程序设计</p><div class='tch-name'><span>学分:3</span><span>03~04节</span></div><div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼-厚德楼B211(实验室)</span><span><img src='/jsxsd/assets_v1/images/item3.png'>第15周 星期三</span></div><span style='display:none;' name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241002763' width=120/></span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'><div>链接:</div></span></div>
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
</tr>
<tr align="center">
<td>第五六节
<br>(05,06小节)
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box' style='background-color: rgb(251, 194, 194);'><p>中国近现代...</p><p>教师:李婷</p><span class='text'>05~06小节 第15周</span></span><div class='item-box' ><p>中国近现代史纲要</p><div class='tch-name'><span>学分:3</span><span>05~06节</span></div><div><span><img src='/jsxsd/assets_v1/images/item1.png'>励志楼B-励志楼B104</span><span><img src='/jsxsd/assets_v1/images/item3.png'>第15周 星期一</span></div><span style='display:none;' name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241000612' width=120/></span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'><div>链接:</div></span></div>
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box' style='background-color: rgb(251, 194, 194);'><p>软件系统设...</p><p>教师:程雪平</p><span class='text'>05~06小节 第15周</span></span><div class='item-box' ><p>软件系统设计与体系结构</p><div class='tch-name'><span>学分:3</span><span>05~06节</span></div><div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼C-厚德楼C403实验室</span><span><img src='/jsxsd/assets_v1/images/item3.png'>第15周 星期二</span></div><span style='display:none;' name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241002766' width=120/></span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'><div>链接:</div></span></div>
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box' style='background-color: rgb(251, 194, 194);'><p>中国近现代...</p><p>教师:李婷</p><span class='text'>05~06小节 第15周</span></span><div class='item-box' ><p>中国近现代史纲要</p><div class='tch-name'><span>学分:3</span><span>05~06节</span></div><div><span><img src='/jsxsd/assets_v1/images/item1.png'>励志楼C-励志楼C101</span><span><img src='/jsxsd/assets_v1/images/item3.png'>第15周 星期三</span></div><span style='display:none;' name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241000612' width=120/></span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'><div>链接:</div></span></div>
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
</tr>
<tr align="center">
<td>第七八节
<br>(07,08小节)
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box' style='background-color: rgb(251, 194, 194);'><p>创业管理</p><p>教师:谢根仁</p><span class='text'>07~08小节 第15周</span></span><div class='item-box' ><p>创业管理</p><div class='tch-name'><span>学分:2</span><span>07~08节</span></div><div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼C-厚德楼C208</span><span><img src='/jsxsd/assets_v1/images/item3.png'>第15周 星期一</span></div><span style='display:none;' name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241006904' width=120/></span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'><div>链接:</div></span></div>
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box' style='background-color: rgb(251, 194, 194);'><p>程序设计课...</p><p>教师:鲁健恒</p><span class='text'>07~08小节 第15周</span></span><div class='item-box' ><p>程序设计课程设计</p><div class='tch-name'><span>学分:1</span><span>07~08节</span></div><div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼-厚德楼B406</span><span><img src='/jsxsd/assets_v1/images/item3.png'>第15周 星期二</span></div><span style='display:none;' name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241003015' width=120/></span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'><div>链接:</div></span></div>
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box' style='background-color: rgb(251, 194, 194);'><p>数据库系统...</p><p>教师:陈霸氙</p><span class='text'>07~08小节 第15周</span></span><div class='item-box' ><p>数据库系统课程设计</p><div class='tch-name'><span>学分:1</span><span>07~08节</span></div><div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼A-厚德楼A503(手工模拟实训室1)</span><span><img src='/jsxsd/assets_v1/images/item3.png'>第15周 星期三</span></div><span style='display:none;' name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241003018' width=120/></span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'><div>链接:</div></span></div>
</td>
<td align="left">
</td>
<td align="left">
<span onmouseover='kbtc(this)' onmouseout='kbot(this)' class='box' style='background-color: rgb(251, 194, 194);'><p>数据库系统...</p><p>教师:陈霸氙</p><span class='text'>07~08小节 第15周</span></span><div class='item-box' ><p>数据库系统课程设计</p><div class='tch-name'><span>学分:1</span><span>07~08节</span></div><div><span><img src='/jsxsd/assets_v1/images/item1.png'>厚德楼A-厚德楼A503(手工模拟实训室1)</span><span><img src='/jsxsd/assets_v1/images/item3.png'>第15周 星期五</span></div><span style='display:none;' name='wkxx'><img src='/jsxsd/jsxx/ewmck?id=202320241003018' width=120/></span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'>群号:</span><span style='display:none;word-wrap:break-word;word-break:break-all;' name='wkxx'><div>链接:</div></span></div>
</td>
<td align="left">
</td>
<td align="left">
</td>
</tr>
<tr align="center">
<td>第九十十一节
<br>(09,10,11小节)
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
</tr>
<tr align="center">
<td>中午
<br>(12,13小节)
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
<td align="left">
</td>
</tr>
<tr height="30">
<td align="center">备注&nbsp;&nbsp;</td>
<td colspan="7" style="color: red;" style="text-align:left;" >&nbsp;影视鉴赏(网络) 陈旭光 4-18周;数据结构与算法(C语言) 1-18周;</td>
</tr>
</tbody>
</table>
<style>
#tooltip{position:absolute;z-index:9999;display:none;padding:4px 8px;border:1px solid rgba(255,255,255,0.25);border-radius:3px;background-color:#333333;filter:alpha(Opacity=80); opacity: 0.8;color:#fff;text-align:left;font-size:16px;}
#tooltip:before{position:absolute;top:-6px;left:15px;width:0;height:0;border:6px dashed #333333;border-top:0;color:#fff;content:' ';line-height:0;border-bottom-style:solid;border-left-color:transparent;border-right-color:transparent;}
</style>
<script type="text/javascript">
showwk(false);
function showwk(flag){
if(flag){//显示网课
$("span[name='wkxx']").show();
}else{
$("span[name='wkxx']").hide();
}
}
$("#li_showWeek").html("<span class=\"main_text main_color\">第15周</span>/20周");
$(function(){
var x=-15;//title显示层x轴偏移量
var y=30;//title显示层y轴偏移量
$("p").mouseover(function(e){//
// 对所有td元素增加鼠标移入移出事件 //edit by wangwei 2018.10.31 此处修改为对所有P标签增加移入移出事件
this.myTitle=this.title;
this.title="";
if(this.myTitle != ""){
var tooltip="<div id='tooltip'>"+this.myTitle+"</div>"; //创建DIV元素
$("body").append(tooltip); //追加到文档中
$("#tooltip").css({"top": (e.pageY+y) + "px","left": (e.pageX+x) + "px"}).show(); //设置X Y坐标, 并且显示
}
}).mouseout(function(){
this.title=this.myTitle;
$("#tooltip").remove(); //移除
}).mousemove(function(e){
$("#tooltip").css({"top": (e.pageY+y) + "px","left": (e.pageX+x) + "px"});
})
})
// 课表弹窗
function kbtc(t){
t.nextSibling.style.display = "flex";
}
function kbot(t) {
t.nextSibling.style.display = "none";
}
function openWindow(name) {
var iWidth=1100; //弹出窗口的宽度;
var iHeight=550; //弹出窗口的高度;
var iTop = (window.screen.availHeight-30-iHeight)/2; //得到窗口的垂直位置;
var iLeft = (window.screen.availWidth-10-iWidth)/2; //得到窗口的水平位置;
window.open(name,name,"height="+iHeight+", width="+iWidth+", top="+iTop+", left="+iLeft+",toolbar=no, menubar=no, scrollbars=yes,resizable=yes,location=no, status=no");
}
</script>
package test
import (
"fmt"
"gdhsxy/utils"
"testing"
)
func TestReadFile(t *testing.T) {
data, err := utils.ReadFile("../resource/schedule.html")
fmt.Println(string(data), err)
}
\ No newline at end of file
package test
import (
// "encoding/json"
"fmt"
"gdhsxy/hsxy"
"gdhsxy/utils"
"io"
"regexp"
"strings"
"testing"
)
func TestFetch(t *testing.T) {
base_url := "http://jwxt.gdhsc.edu.cn/jsxsd/framework/mainV_index_loadkb.htmlx"
req := hsxy.BuildRequest(base_url)
// fmt.Println(req)
resp, err := hsxy.Fetch(req)
if err != nil {
fmt.Println(err)
}
body, err := io.ReadAll(resp.Body)
fmt.Println(string(body))
if err != nil {
fmt.Println(err)
}
}
func TestParse(t *testing.T) {
s := new(hsxy.Schedule)
sch := map[string]string{
"周次小节": "星期一 01~02小节 第15周",
"地点": "厚德楼C-厚德楼C303大金融实验室",
"教师": "钟广玲",
"课程名称": "Python程序设计",
}
fmt.Println(s.Parse(sch))
}
func TestParser(t *testing.T) {
data, err := utils.ReadFile("../resource/schedule.html")
if err != nil {
fmt.Println(err)
}
re := regexp.MustCompile(`(?s)<tr align="center">(.*?)</tr>`)
matches := re.FindAllString(string(data), -1)
// 匹配字段
nameCompile := regexp.MustCompile(`<p>([^<]+)</p><div class='tch-name'>`)
teacherCompile := regexp.MustCompile(`</p><p>(.*?)</p><span class='text'>`)
dateCompile := regexp.MustCompile(`<span class='text'>(.*?)</span></span>`)
addrCompile := regexp.MustCompile(`<img src='/jsxsd/assets_v1/images/item1.png'>(.*?)</span><span>`)
weekCompile := regexp.MustCompile(`<img src='/jsxsd/assets_v1/images/item3.png'>(.*?)</span></div><span style='display:none;' name='wkxx'>`)
var result []string
for _, matche := range matches {
nameTemp := nameCompile.FindAllStringSubmatch(matche, -1)
teacherTemp := teacherCompile.FindAllStringSubmatch(matche, -1)
dateTemp := dateCompile.FindAllStringSubmatch(matche, -1)
addrTemp := addrCompile.FindAllStringSubmatch(matche, -1)
weekTemp := weekCompile.FindAllStringSubmatch(matche, -1)
if len(nameTemp) > 1 {
for i := 0; i < len(nameTemp); i++ {
result = append(
result,
nameTemp[i][1],
teacherTemp[i][1],
dateTemp[i][1],
addrTemp[i][1],
weekTemp[i][1],
)
}
}
}
fmt.Println(result)
}
func TestMap(t *testing.T) {
var sTemp []string
var resTemp []map[string]string
var mTemp map[string]string
var result map[string][]map[string]string
data, err := utils.ReadFile("../resource/schedule.html")
if err != nil {
fmt.Println(err)
}
sechdule := hsxy.RawParse(string(data))
result = make(map[string][]map[string]string)
var time string
const key = "sch"
for i := 0; i <= len(sechdule); i++ {
if i%5 == 0 && i != 0 {
name := sTemp[0]
teacher := strings.Split(sTemp[1], ":")[1]
date := strings.Split(sTemp[4], " ")[1] + " " + sTemp[2]
addr := sTemp[3]
strs := strings.Split(sTemp[2], " ")[0]
switch strs {
case "01~02小节":
time = strings.Split(hsxy.HDL_1, "-")[0] + "-" + strings.Split(hsxy.HDL_2, "-")[1]
case "03~04小节":
time = strings.Split(hsxy.HDL_3, "-")[0] + "-" + strings.Split(hsxy.HDL_4, "-")[1]
case "05~06小节":
time = strings.Split(hsxy.HDL_5, "-")[0] + "-" + strings.Split(hsxy.HDL_6, "-")[1]
case "07~08小节":
time = strings.Split(hsxy.HDL_7, "-")[0] + "-" + strings.Split(hsxy.HDL_8, "-")[1]
case "09~10~11小节":
time = strings.Split(hsxy.HDL_9, "-")[0] + "-" + strings.Split(hsxy.HDL_11, "-")[1]
}
mTemp = map[string]string{
"课程名称": name,
"教师": teacher,
"时间": time,
"周次小节": date,
"地点": addr,
}
resTemp = append(resTemp, mTemp)
sTemp = []string{}
}
if i != 65 {
sTemp = append(sTemp, sechdule[i])
}
}
result[key] = resTemp
fmt.Println(len(resTemp))
// fmt.Println(result)
}
package utils
import (
"bufio"
_ "fmt"
"io"
"log"
"os"
)
func init() {
}
func ReadFile(path string) (data []byte, err error) {
file, err := os.Open(path)
if err != nil {
return nil, err
}
defer file.Close()
var rd io.Reader = file
// var lines []string
reader := bufio.NewReader(rd)
// for {
// // ReadLine is a low-level line-reading primitive.
// // Most callers should use ReadBytes('\n') or ReadString('\n') instead or use a Scanner.
// bytes, _, err := reader.ReadLine()
// if err == io.EOF {
// break
// }
// if err != nil {
// return lines, err
// }
// lines = append(lines, string(bytes))
// // fmt.Println(string(bytes))
// }
// fmt.Println(lines)
data, err = io.ReadAll(reader)
return data, err
}
func WriteFile(data []byte) {
if _, err := io.WriteString(os.Stdout, "Hello World"); err != nil {
log.Fatal(err)
}
os.WriteFile("../resource/schedule.html", data, os.ModePerm)
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment