mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender.git
synced 2025-07-16 09:38:49 +02:00
add fetcher for semgrp from xml
This commit is contained in:
21
addRoute.go
21
addRoute.go
@ -5,6 +5,7 @@ import (
|
||||
"github.com/pocketbase/pocketbase"
|
||||
"github.com/pocketbase/pocketbase/apis"
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
"htwk-planner/service"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
@ -15,7 +16,25 @@ func addRoutes(app *pocketbase.PocketBase) {
|
||||
Method: http.MethodGet,
|
||||
Path: "/api/fetchPlans",
|
||||
Handler: func(c echo.Context) error {
|
||||
return fetchHTWK(c, app)
|
||||
return service.FetchHTWK(c, app)
|
||||
},
|
||||
Middlewares: []echo.MiddlewareFunc{
|
||||
apis.ActivityLogger(app),
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
|
||||
_, err := e.Router.AddRoute(echo.Route{
|
||||
Method: http.MethodGet,
|
||||
Path: "/api/fetchGroups",
|
||||
Handler: func(c echo.Context) error {
|
||||
return service.FetchSeminarGroups(c, app)
|
||||
},
|
||||
Middlewares: []echo.MiddlewareFunc{
|
||||
apis.ActivityLogger(app),
|
||||
|
9
main.go
9
main.go
@ -1,22 +1,13 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/labstack/echo/v5"
|
||||
"github.com/pocketbase/pocketbase"
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
app := pocketbase.New()
|
||||
|
||||
app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
|
||||
e.Router.GET("/api/hello", func(c echo.Context) error {
|
||||
return c.String(200, "Hello world!")
|
||||
})
|
||||
return nil
|
||||
})
|
||||
|
||||
addRoutes(app)
|
||||
|
||||
if err := app.Start(); err != nil {
|
||||
|
@ -3,6 +3,10 @@ package model
|
||||
type SeminarGroup struct {
|
||||
University string
|
||||
GroupShortcut string
|
||||
GroupId string
|
||||
Course string
|
||||
Faculty string
|
||||
FacultyId string
|
||||
Events []Events
|
||||
}
|
||||
|
||||
|
29
model/seminarGroupXMLStruct.go
Normal file
29
model/seminarGroupXMLStruct.go
Normal file
@ -0,0 +1,29 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
)
|
||||
|
||||
type Studium struct {
|
||||
XMLName xml.Name `xml:"studium"`
|
||||
Fakultaet []Fakultaet `xml:"fakultaet"`
|
||||
}
|
||||
|
||||
type Fakultaet struct {
|
||||
XMLName xml.Name `xml:"fakultaet"`
|
||||
Name string `xml:"name,attr"`
|
||||
ID string `xml:"id,attr"`
|
||||
Studiengang []Studiengang `xml:"studiengang"`
|
||||
}
|
||||
|
||||
type Studiengang struct {
|
||||
XMLName xml.Name `xml:"studiengang"`
|
||||
Name string `xml:"name,attr"`
|
||||
ID string `xml:"id,attr"`
|
||||
Semgrp []Semgrp `xml:"semgrp"`
|
||||
}
|
||||
|
||||
type Semgrp struct {
|
||||
XMLName xml.Name `xml:"semgrp"`
|
||||
Name string `xml:"name,attr"`
|
||||
}
|
82
service/fetchSeminarGroupService.go
Normal file
82
service/fetchSeminarGroupService.go
Normal file
@ -0,0 +1,82 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"htwk-planner/model"
|
||||
"io"
|
||||
"net/http"
|
||||
|
||||
"github.com/labstack/echo/v5"
|
||||
"github.com/pocketbase/pocketbase"
|
||||
)
|
||||
|
||||
func getSeminarHTML() (string, error) {
|
||||
url := "https://stundenplan.htwk-leipzig.de/stundenplan/xml/public/semgrp_ss.xml"
|
||||
|
||||
// Send GET request
|
||||
response, err := http.Get(url)
|
||||
if err != nil {
|
||||
fmt.Printf("Error occurred while making the request: %s\n", err.Error())
|
||||
return "", err
|
||||
}
|
||||
defer func(Body io.ReadCloser) {
|
||||
err := Body.Close()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}(response.Body)
|
||||
|
||||
// Read the response body
|
||||
body, err := io.ReadAll(response.Body)
|
||||
|
||||
if err != nil {
|
||||
fmt.Printf("Error occurred while reading the response: %s\n", err.Error())
|
||||
return "", err
|
||||
}
|
||||
|
||||
return string(body), err
|
||||
|
||||
}
|
||||
|
||||
func FetchSeminarGroups(c echo.Context, app *pocketbase.PocketBase) error {
|
||||
|
||||
result, _ := getSeminarHTML()
|
||||
|
||||
println(result)
|
||||
|
||||
var studium []model.SeminarGroup
|
||||
|
||||
studium = parseSeminarGroups(result)
|
||||
|
||||
return c.JSON(http.StatusOK, studium)
|
||||
}
|
||||
|
||||
func parseSeminarGroups(result string) []model.SeminarGroup {
|
||||
|
||||
var studium model.Studium
|
||||
|
||||
err := xml.Unmarshal([]byte(result), &studium)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var seminarGroups []model.SeminarGroup
|
||||
for _, Fakultaet := range studium.Fakultaet {
|
||||
for _, Studiengang := range Fakultaet.Studiengang {
|
||||
for _, Studienrichtung := range Studiengang.Semgrp {
|
||||
seminarGroup := model.SeminarGroup{
|
||||
University: "HTWK-Leipzig",
|
||||
GroupShortcut: Studiengang.Name,
|
||||
GroupId: Studiengang.ID,
|
||||
Course: Studienrichtung.Name,
|
||||
Faculty: Fakultaet.Name,
|
||||
FacultyId: Fakultaet.ID,
|
||||
}
|
||||
seminarGroups = append(seminarGroups, seminarGroup)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return seminarGroups
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package main
|
||||
package service
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
@ -13,7 +13,7 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
func fetchHTWK(c echo.Context, app *pocketbase.PocketBase) error {
|
||||
func FetchHTWK(c echo.Context, app *pocketbase.PocketBase) error {
|
||||
|
||||
var seminarGroups []model.SeminarGroup
|
||||
|
||||
@ -109,11 +109,6 @@ func toEvents(tables [][]*html.Node, days []string) []model.Events {
|
||||
Notes: getTextContent(tableData[7]),
|
||||
BookedAt: getTextContent(tableData[8]),
|
||||
})
|
||||
// Print the content of each <td> element
|
||||
//for _, td := range tableData {
|
||||
// content := getTextContent(td)
|
||||
// println(content)
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user