From 213b0c9ae4ac6fb6e4e9a06a4d90ed76f2ec28b1 Mon Sep 17 00:00:00 2001 From: bvp Date: Thu, 5 Oct 2023 17:08:39 +0300 Subject: [PATCH] v0.1.4 --- .gitignore | 2 +- main.go | 35 ++++++++++++++--------------------- main_test.go | 5 ++--- models.go | 3 +-- 4 files changed, 18 insertions(+), 27 deletions(-) diff --git a/.gitignore b/.gitignore index cad305a..b57f3cb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .idea .vscode -config_test.json +config_test*.json *~ *.bak *.dll diff --git a/main.go b/main.go index fea7a77..3dfa8ed 100644 --- a/main.go +++ b/main.go @@ -4,9 +4,8 @@ package dnevnik76 import ( "crypto/tls" "encoding/json" - "errors" "fmt" - "io/ioutil" + "io" "log" "regexp" "strconv" @@ -47,7 +46,7 @@ var ( func NewClient(login string, password string, schoolID int64, httpClient *http.Client) *Client { jar, err := cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List}) if err != nil { - log.Fatal(err) + log.Fatalf("NewClient error - %s", err) } ci := CurrentInfo{} @@ -142,12 +141,11 @@ func (cli *Client) getCurrentInfo() (err error) { } cli.CurrentInfo.SchoolID = cli.SchoolID - classNumber, classChar, err := getClassName(doc.Find("#auth_info > #role").Text()) + class, err := getClassName(doc.Find("#auth_info > #role").Text()) if err != nil { return } - cli.CurrentInfo.ClassNumber = classNumber - cli.CurrentInfo.ClassChar = classChar + cli.CurrentInfo.Class = class classIDText, _ := doc.Find("body").Attr("onload") if classIDText != "" { @@ -260,6 +258,11 @@ func (cli *Client) GetCurrentQuarter() (result string) { result = p.Period break } + } else { + if strings.Contains(p.Name, "полугодие") { + result = p.Period + break + } } } return @@ -496,7 +499,7 @@ func (cli *Client) GetMessagesCount() (unread int, total int, err error) { return } - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) if err != nil { return } @@ -575,20 +578,10 @@ func (cli *Client) GetMessage(msgID int64) (m Message, err error) { return } -func getClassName(s string) (classNumber int, classChar string, err error) { - re, err := regexp.Compile(`\s?\n\s+Учащийся\n\s+\((\d+) "(.)"\)\n\s+`) - if err != nil { - return - } - matches := re.FindStringSubmatch(s) - if len(matches) > 1 { - clsNum, _ := strconv.ParseInt(matches[1], 10, 32) - classNumber = int(clsNum) - classChar = re.FindStringSubmatch(s)[2] - } else { - return 0, "", errors.New("match size less or equal then 1") - } - +func getClassName(s string) (class string, err error) { + re_inside_whtsp := regexp.MustCompile(`[\s\p{Zs}]{2,}`) + final := re_inside_whtsp.ReplaceAllString(strings.TrimSpace(s), " ") + class = strings.TrimLeft(strings.TrimRight(final, ")"), "Учащийся (") return } diff --git a/main_test.go b/main_test.go index 09eaa9d..98d1af7 100644 --- a/main_test.go +++ b/main_test.go @@ -3,7 +3,6 @@ package dnevnik76 import ( "encoding/json" "fmt" - "io/ioutil" "log" "os" "sort" @@ -173,7 +172,7 @@ func TestClient_GetCourses(t *testing.T) { courses, _ := client.GetCourses() t.Logf(":: size - %d", len(courses)) - years := []string{"2022", "2021", "2020", "2019", "2018"} + years := []string{"2023", "2022", "2021", "2020", "2019", "2018"} for _, y := range years { client.SetCookie("edu_year", y) client.getCurrentInfo() @@ -218,7 +217,7 @@ func TestClient_GetTeachers(t *testing.T) { func setup() { DEBUG = true - file, _ := ioutil.ReadFile("config_test.json") + file, _ := os.ReadFile("config_test.json") cfg = config{} _ = json.Unmarshal([]byte(file), &cfg) diff --git a/models.go b/models.go index 131e11f..b1b4903 100644 --- a/models.go +++ b/models.go @@ -22,8 +22,7 @@ type CurrentInfo struct { //PersonID int64 `json:"personId" xorm:"'person_id'"` SchoolID int64 `json:"schoolId" xorm:"'school_id'"` ClassID int64 `json:"clsId" xorm:"'class_id'"` - ClassNumber int `json:"clsNum"` - ClassChar string `json:"clsChr"` + Class string `json:"cls"` EduYearStart int `json:"eduYearStart"` EduYearEnd int `json:"eduYearEnd"` }