Getting Data from api

This commit is contained in:
Jannover5000r 2025-06-24 14:45:59 +02:00
parent 8b94cac5ba
commit 1bd4de6bf4
6 changed files with 367 additions and 67 deletions

6
.gitignore vendored
View file

@ -1 +1,5 @@
.env
.env
rooms.json
classes.json
subjects.json
teachers.json

86
Bot/Classes.go Normal file
View file

@ -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")
}

90
Bot/Rooms.go Normal file
View file

@ -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")
}

86
Bot/Subjects.go Normal file
View file

@ -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")
}

86
Bot/Teachers.go Normal file
View file

@ -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")
}

View file

@ -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)
}