Getting Data from api
This commit is contained in:
parent
8b94cac5ba
commit
1bd4de6bf4
6 changed files with 367 additions and 67 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
|
@ -1 +1,5 @@
|
||||||
.env
|
.env
|
||||||
|
rooms.json
|
||||||
|
classes.json
|
||||||
|
subjects.json
|
||||||
|
teachers.json
|
||||||
|
|
|
||||||
86
Bot/Classes.go
Normal file
86
Bot/Classes.go
Normal 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
90
Bot/Rooms.go
Normal 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
86
Bot/Subjects.go
Normal 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
86
Bot/Teachers.go
Normal 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")
|
||||||
|
}
|
||||||
80
Bot/Untis.go
80
Bot/Untis.go
|
|
@ -3,7 +3,6 @@ package Untis
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io"
|
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
|
@ -16,12 +15,7 @@ type Params struct {
|
||||||
Password string `json:"password"`
|
Password string `json:"password"`
|
||||||
Client string `json:"client"`
|
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 {
|
type Login struct {
|
||||||
Id string `json:"id"`
|
Id string `json:"id"`
|
||||||
Method string `json:"method"`
|
Method string `json:"method"`
|
||||||
|
|
@ -30,15 +24,6 @@ type Login struct {
|
||||||
Jsonrpc string `json:"jsonrpc"`
|
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 Url = "https://thalia.webuntis.com/WebUntis/jsonrpc.do?school=Mons_Tabor"
|
||||||
var Password = os.Getenv("UNTIS_PASSWORD")
|
var Password = os.Getenv("UNTIS_PASSWORD")
|
||||||
var USERS = os.Getenv("UNTIS_USER")
|
var USERS = os.Getenv("UNTIS_USER")
|
||||||
|
|
@ -51,6 +36,13 @@ func Main() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
Rooms(cookies)
|
Rooms(cookies)
|
||||||
|
|
||||||
|
Classes(cookies)
|
||||||
|
|
||||||
|
Subjects(cookies)
|
||||||
|
|
||||||
|
//getTeachers sends empty response -> commented out
|
||||||
|
//Teachers(cookies)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Auth() ([]*http.Cookie, error) {
|
func Auth() ([]*http.Cookie, error) {
|
||||||
|
|
@ -62,7 +54,7 @@ func Auth() ([]*http.Cookie, error) {
|
||||||
}
|
}
|
||||||
login := bytes.NewReader(loginJSON)
|
login := bytes.NewReader(loginJSON)
|
||||||
|
|
||||||
log.Println("Run")
|
//log.Println("Run")
|
||||||
LoginOut, err := http.Post(Url, "application/json", login)
|
LoginOut, err := http.Post(Url, "application/json", login)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error during authentication: %v", err)
|
log.Printf("Error during authentication: %v", err)
|
||||||
|
|
@ -72,55 +64,11 @@ func Auth() ([]*http.Cookie, error) {
|
||||||
|
|
||||||
// Parse cookies from response
|
// Parse cookies from response
|
||||||
cookies := LoginOut.Cookies()
|
cookies := LoginOut.Cookies()
|
||||||
log.Println("Received cookies:", cookies)
|
//log.Println("Received cookies:", cookies)
|
||||||
log.Println("Set-Cookie headers:", LoginOut.Header["Set-Cookie"])
|
//log.Println("Set-Cookie headers:", LoginOut.Header["Set-Cookie"])
|
||||||
loginRespBody, _ := io.ReadAll(LoginOut.Body)
|
//loginRespBody, _ := io.ReadAll(LoginOut.Body)
|
||||||
log.Println("Login response body:", string(loginRespBody))
|
//log.Println("Login response body:", string(loginRespBody))
|
||||||
|
log.Println("Login successful")
|
||||||
return cookies, nil
|
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)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue