diff --git a/jwch_test.go b/jwch_test.go index 11fe259..2342a06 100644 --- a/jwch_test.go +++ b/jwch_test.go @@ -279,7 +279,7 @@ func TestGetExamRoomInfo(t *testing.T) { } func TestGetNoticesInfo(t *testing.T) { - _, err := stu.GetNoticeInfo() + _, err := stu.GetNoticeInfo(&NoticeInfoReq{PageNum: 2}) if err != nil { t.Error(err) } diff --git a/model.go b/model.go index 8da6832..5c6ee29 100644 --- a/model.go +++ b/model.go @@ -193,3 +193,7 @@ type NoticeInfo struct { URL string // 通知链接 Date string // 通知日期 } + +type NoticeInfoReq struct { + PageNum int // 获取第几页的数据,从 1 开始 +} diff --git a/notice.go b/notice.go index 2993d29..44215b9 100644 --- a/notice.go +++ b/notice.go @@ -26,15 +26,24 @@ import ( "github.com/west2-online/jwch/constants" ) -func (s *Student) GetNoticeInfo() (list []*NoticeInfo, err error) { - // 获取通知公告 - // 1. 获取通知公告页面 +func (s *Student) GetNoticeInfo(req *NoticeInfoReq) (list []*NoticeInfo, err error) { + // 获取通知公告页面的总页数 res, err := s.PostWithIdentifier(constants.NoticeInfoQueryURL, map[string]string{}) if err != nil { return nil, err } - // 2. 解析页面 - list, err = parseNoticeInfo(res) + lastPageNum, err := getTotalPages(res) + if err != nil { + return nil, err + } + // 根据总页数计算 url + num := lastPageNum - req.PageNum + 1 + url := fmt.Sprintf("https://jwch.fzu.edu.cn/jxtz/%d.htm", num) + doc, err := s.PostWithIdentifier(url, map[string]string{}) + if err != nil { + return nil, err + } + list, err = parseNoticeInfo(doc) if err != nil { return nil, err } @@ -42,17 +51,16 @@ func (s *Student) GetNoticeInfo() (list []*NoticeInfo, err error) { return list, nil } +// 获取当前页面的所有数据信息 func parseNoticeInfo(doc *html.Node) ([]*NoticeInfo, error) { // 解析通知公告页面 var list []*NoticeInfo - // 修正 XPath 表达式 sel := htmlquery.FindOne(doc, "//div[@class='box-gl clearfix']") if sel == nil { return nil, fmt.Errorf("cannot find the notice list") } - // 查找所有的