From 1bd4de6bf4f3ac6151a8c8900e1e4cf4a6fff3bc Mon Sep 17 00:00:00 2001 From: Jannover5000r Date: Tue, 24 Jun 2025 14:45:59 +0200 Subject: [PATCH] Getting Data from api --- .gitignore | 6 +++- Bot/Classes.go | 86 ++++++++++++++++++++++++++++++++++++++++++++++ Bot/Rooms.go | 90 +++++++++++++++++++++++++++++++++++++++++++++++++ Bot/Subjects.go | 86 ++++++++++++++++++++++++++++++++++++++++++++++ Bot/Teachers.go | 86 ++++++++++++++++++++++++++++++++++++++++++++++ Bot/Untis.go | 80 ++++++++----------------------------------- 6 files changed, 367 insertions(+), 67 deletions(-) create mode 100644 Bot/Classes.go create mode 100644 Bot/Rooms.go create mode 100644 Bot/Subjects.go create mode 100644 Bot/Teachers.go diff --git a/.gitignore b/.gitignore index 2eea525..d830b8b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ -.env \ No newline at end of file +.env +rooms.json +classes.json +subjects.json +teachers.json diff --git a/Bot/Classes.go b/Bot/Classes.go new file mode 100644 index 0000000..c3d389c --- /dev/null +++ b/Bot/Classes.go @@ -0,0 +1,86 @@ +package Untis + +import ( + "bytes" + "encoding/json" + "io" + "log" + "net/http" + "os" +) + +type classesResponse struct { + Jsonrpc string `json:"jsonrpc"` + ID string `json:"id"` + Result []classes `json:"result"` +} +type classes struct { + ID int `json:"id"` + Name string `json:"name"` + LongName string `json:"longName"` + Active bool `json:"active"` + Teacher1 int `json:"teacher1"` +} +type getClasses struct { + Id string `json:"id"` + Method string `json:"method"` + Params interface{} `json:"params"` + Jsonrpc string `json:"jsonrpc"` +} + +func Classes(cookies []*http.Cookie) { + g := getClasses{"2023-05-06 15:44:22.215292", "getKlassen", map[string]interface{}{}, "2.0"} + ClassesJson, err := json.Marshal(g) + if err != nil { + log.Fatalf("Error marshaling login data: %v", err) + return + } + classes := bytes.NewReader(ClassesJson) + + prompt, err := http.NewRequest("POST", Url, classes) + if err != nil { + log.Fatalf("Error creatingrequest: %v", err) + return + } + //log.Println("prompt without extra header or cookie ", prompt) + //log.Println("Cookie: ", cookies) + + prompt.Header.Set("Content-Type", "application/json") + prompt.Header.Set("User-Agent", "Webuntis Test") + + for _, cookie := range cookies { + //if cookie.Name == "JSESSIONID" { + prompt.AddCookie(cookie) + //log.Printf("Added JSESSIONID cookie: %s=%s", cookie.Name, cookie.Value) + //} + } + //log.Println("Request JSON:", string(ClassesJson)) + out, err := http.DefaultClient.Do(prompt) + if err != nil { + log.Printf("Error during request: %v", err) + return + } + defer out.Body.Close() + //log.Println(out.Status) + response, err := io.ReadAll(out.Body) + if err != nil { + log.Printf("Error reading response body: %v", err) + return + } + //responseString := string(response) + //log.Println("Repsonse ", responseString) + var Response classesResponse + err = json.Unmarshal(response, &Response) + if err != nil { + log.Fatalf("Error unmarshaling response: %v", err) + } + data, err := json.MarshalIndent(Response.Result, "", " ") + if err != nil { + log.Fatal(err) + } + err = os.WriteFile("classes.json", data, 0644) + if err != nil { + log.Fatal(err) + } + log.Println("Updated Classes") +} diff --git a/Bot/Rooms.go b/Bot/Rooms.go new file mode 100644 index 0000000..0cca160 --- /dev/null +++ b/Bot/Rooms.go @@ -0,0 +1,90 @@ +package Untis + +import ( + "bytes" + "encoding/json" + "io" + "log" + "net/http" + "os" +) + +type getRooms struct { + Id string `json:"id"` + Method string `json:"method"` + Params interface{} `json:"params"` + Jsonrpc string `json:"jsonrpc"` +} + +type RoomsResponse struct { + Jsonrpc string `json:"jsonrpc"` + ID string `json:"id"` + Result []Room `json:"result"` +} + +type Room struct { + ID int `json:"id"` + Name string `json:"name"` + LongName string `json:"longName"` + Active bool `json:"active"` + Building string `json:"building"` +} + +func Rooms(cookies []*http.Cookie) { + //log.Println("Abrufen der Stunden") + g := getRooms{"2023-05-06 15:44:22.215292", "getRooms", map[string]interface{}{}, "2.0"} + roomsJson, err := json.Marshal(g) + if err != nil { + log.Fatalf("Error marshaling login data: %v", err) + return + } + rooms := bytes.NewReader(roomsJson) + + prompt, err := http.NewRequest("POST", Url, rooms) + if err != nil { + log.Fatalf("Error creatingrequest: %v", err) + return + } + //log.Println("prompt without extra header or cookie ", prompt) + //log.Println("Cookie: ", cookies) + + prompt.Header.Set("Content-Type", "application/json") + prompt.Header.Set("User-Agent", "Webuntis Test") + + for _, cookie := range cookies { + //if cookie.Name == "JSESSIONID" { + prompt.AddCookie(cookie) + // log.Printf("Added JSESSIONID cookie: %s=%s", cookie.Name, cookie.Value) + //} + } + //log.Println("Request JSON:", string(roomsJson)) + out, err := http.DefaultClient.Do(prompt) + if err != nil { + log.Printf("Error during request: %v", err) + return + } + defer out.Body.Close() + //log.Println(out.Status) + response, err := io.ReadAll(out.Body) + if err != nil { + log.Printf("Error reading response body: %v", err) + return + } + //responseString := string(response) + //log.Println("Repsonse ", responseString) + var Response RoomsResponse + err = json.Unmarshal(response, &Response) + if err != nil { + log.Fatalf("Error unmarshaling response: %v", err) + } + + data, err := json.MarshalIndent(Response.Result, "", " ") + if err != nil { + log.Fatal(err) + } + err = os.WriteFile("rooms.json", data, 0644) + if err != nil { + log.Fatal(err) + } + log.Println("Updated Rooms") +} diff --git a/Bot/Subjects.go b/Bot/Subjects.go new file mode 100644 index 0000000..a94543e --- /dev/null +++ b/Bot/Subjects.go @@ -0,0 +1,86 @@ +package Untis + +import ( + "bytes" + "encoding/json" + "io" + "log" + "net/http" + "os" +) + +type subjectsResponse struct { + Jsonrpc string `json:"jsonrpc"` + ID string `json:"id"` + Result []subjects `json:"result"` +} +type subjects struct { + ID int `json:"id"` + Name string `json:"name"` + LongName string `json:"longName"` + Active bool `json:"active"` + AlternateName string `json:"alternateName"` +} +type getSubjects struct { + Id string `json:"id"` + Method string `json:"method"` + Params interface{} `json:"params"` + Jsonrpc string `json:"jsonrpc"` +} + +func Subjects(cookies []*http.Cookie) { + g := getSubjects{"2023-05-06 15:44:22.215292", "getSubjects", map[string]interface{}{}, "2.0"} + SubjectsJson, err := json.Marshal(g) + if err != nil { + log.Fatalf("Error marshaling login data: %v", err) + return + } + subjects := bytes.NewReader(SubjectsJson) + + prompt, err := http.NewRequest("POST", Url, subjects) + if err != nil { + log.Fatalf("Error creatingrequest: %v", err) + return + } + //log.Println("prompt without extra header or cookie ", prompt) + //log.Println("Cookie: ", cookies) + + prompt.Header.Set("Content-Type", "application/json") + prompt.Header.Set("User-Agent", "Webuntis Test") + + for _, cookie := range cookies { + //if cookie.Name == "JSESSIONID" { + prompt.AddCookie(cookie) + //log.Printf("Added JSESSIONID cookie: %s=%s", cookie.Name, cookie.Value) + //} + } + //log.Println("Request JSON:", string(SubjectsJson)) + out, err := http.DefaultClient.Do(prompt) + if err != nil { + log.Printf("Error during request: %v", err) + return + } + defer out.Body.Close() + //log.Println(out.Status) + response, err := io.ReadAll(out.Body) + if err != nil { + log.Printf("Error reading response body: %v", err) + return + } + //responseString := string(response) + //log.Println("Repsonse ", responseString) + var Response subjectsResponse + err = json.Unmarshal(response, &Response) + if err != nil { + log.Fatalf("Error unmarshaling response: %v", err) + } + data, err := json.MarshalIndent(Response.Result, "", " ") + if err != nil { + log.Fatal(err) + } + err = os.WriteFile("subjects.json", data, 0644) + if err != nil { + log.Fatal(err) + } + log.Println("Updated Subjects") +} diff --git a/Bot/Teachers.go b/Bot/Teachers.go new file mode 100644 index 0000000..95c5130 --- /dev/null +++ b/Bot/Teachers.go @@ -0,0 +1,86 @@ +package Untis + +import ( + "bytes" + "encoding/json" + "io" + "log" + "net/http" + "os" +) + +type teachersResponse struct { + Jsonrpc string `json:"jsonrpc"` + ID string `json:"id"` + Result []teachers `json:"result"` +} +type teachers struct { + ID int `json:"id"` + Name string `json:"name"` + LongName string `json:"longName"` + Active bool `json:"active"` + AlternateName string `json:"alternateName"` +} +type getTeachers struct { + Id string `json:"id"` + Method string `json:"method"` + Params interface{} `json:"params"` + Jsonrpc string `json:"jsonrpc"` +} + +func Teachers(cookies []*http.Cookie) { + g := getTeachers{"2023-05-06 15:44:22.215292", "getTeachers", map[string]interface{}{}, "2.0"} + TeachersJson, err := json.Marshal(g) + if err != nil { + log.Fatalf("Error marshaling login data: %v", err) + return + } + teachers := bytes.NewReader(TeachersJson) + + prompt, err := http.NewRequest("POST", Url, teachers) + if err != nil { + log.Fatalf("Error creatingrequest: %v", err) + return + } + //log.Println("prompt without extra header or cookie ", prompt) + //log.Println("Cookie: ", cookies) + + prompt.Header.Set("Content-Type", "application/json") + prompt.Header.Set("User-Agent", "Webuntis Test") + + for _, cookie := range cookies { + //if cookie.Name == "JSESSIONID" { + prompt.AddCookie(cookie) + //log.Printf("Added JSESSIONID cookie: %s=%s", cookie.Name, cookie.Value) + //} + } + //log.Println("Request JSON:", string(TeachersJson)) + out, err := http.DefaultClient.Do(prompt) + if err != nil { + log.Printf("Error during request: %v", err) + return + } + defer out.Body.Close() + //log.Println(out.Status) + response, err := io.ReadAll(out.Body) + if err != nil { + log.Printf("Error reading response body: %v", err) + return + } + //responseString := string(response) + //log.Println("Repsonse ", responseString) + var Response teachersResponse + err = json.Unmarshal(response, &Response) + if err != nil { + log.Fatalf("Error unmarshaling response: %v", err) + } + data, err := json.MarshalIndent(Response.Result, "", " ") + if err != nil { + log.Fatal(err) + } + err = os.WriteFile("teachers.json", data, 0644) + if err != nil { + log.Fatal(err) + } + log.Println("Updated Teachers") +} diff --git a/Bot/Untis.go b/Bot/Untis.go index f42204f..4722eb4 100644 --- a/Bot/Untis.go +++ b/Bot/Untis.go @@ -3,7 +3,6 @@ package Untis import ( "bytes" "encoding/json" - "io" "log" "net/http" "os" @@ -16,12 +15,7 @@ type Params struct { Password string `json:"password"` Client string `json:"client"` } -type getRooms struct { - Id string `json:"id"` - Method string `json:"method"` - Params interface{} `json:"params"` - Jsonrpc string `json:"jsonrpc"` -} + type Login struct { Id string `json:"id"` Method string `json:"method"` @@ -30,15 +24,6 @@ type Login struct { Jsonrpc string `json:"jsonrpc"` } -type LoginResponse struct { - result struct { - ID string `json:"sessionId"` - PersonType string `json:"personType"` - PersonId string `json:"personId"` - KlasseId string `json:"klasseId"` - } -} - var Url = "https://thalia.webuntis.com/WebUntis/jsonrpc.do?school=Mons_Tabor" var Password = os.Getenv("UNTIS_PASSWORD") var USERS = os.Getenv("UNTIS_USER") @@ -51,6 +36,13 @@ func Main() { return } Rooms(cookies) + + Classes(cookies) + + Subjects(cookies) + + //getTeachers sends empty response -> commented out + //Teachers(cookies) } func Auth() ([]*http.Cookie, error) { @@ -62,7 +54,7 @@ func Auth() ([]*http.Cookie, error) { } login := bytes.NewReader(loginJSON) - log.Println("Run") + //log.Println("Run") LoginOut, err := http.Post(Url, "application/json", login) if err != nil { log.Printf("Error during authentication: %v", err) @@ -72,55 +64,11 @@ func Auth() ([]*http.Cookie, error) { // Parse cookies from response cookies := LoginOut.Cookies() - log.Println("Received cookies:", cookies) - log.Println("Set-Cookie headers:", LoginOut.Header["Set-Cookie"]) - loginRespBody, _ := io.ReadAll(LoginOut.Body) - log.Println("Login response body:", string(loginRespBody)) + //log.Println("Received cookies:", cookies) + //log.Println("Set-Cookie headers:", LoginOut.Header["Set-Cookie"]) + //loginRespBody, _ := io.ReadAll(LoginOut.Body) + //log.Println("Login response body:", string(loginRespBody)) + log.Println("Login successful") return cookies, nil } - -func Rooms(cookies []*http.Cookie) { - //log.Println("Abrufen der Stunden") - g := getRooms{"2023-05-06 15:44:22.215292", "getRooms", map[string]interface{}{}, "2.0"} - roomsJson, err := json.Marshal(g) - if err != nil { - log.Fatalf("Error marshaling login data: %v", err) - return - } - rooms := bytes.NewReader(roomsJson) - - prompt, err := http.NewRequest("POST", Url, rooms) - if err != nil { - log.Fatalf("Error creatingrequest: %v", err) - return - } - //log.Println("prompt without extra header or cookie ", prompt) - log.Println("Cookie: ", cookies) - - prompt.Header.Set("Content-Type", "application/json") - prompt.Header.Set("User-Agent", "Webuntis Test") - - for _, cookie := range cookies { - //if cookie.Name == "JSESSIONID" { - prompt.AddCookie(cookie) - log.Printf("Added JSESSIONID cookie: %s=%s", cookie.Name, cookie.Value) - //} - } - log.Println("Request JSON:", string(roomsJson)) - out, err := http.DefaultClient.Do(prompt) - if err != nil { - log.Printf("Error during request: %v", err) - return - } - defer out.Body.Close() - log.Println(out.Status) - response, err := io.ReadAll(out.Body) - if err != nil { - log.Printf("Error reading response body: %v", err) - return - } - responseString := string(response) - log.Println("Repsonse ", responseString) - -}