mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender-pwa.git
synced 2025-07-16 17:48:51 +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"
|
||||||
"github.com/pocketbase/pocketbase/apis"
|
"github.com/pocketbase/pocketbase/apis"
|
||||||
"github.com/pocketbase/pocketbase/core"
|
"github.com/pocketbase/pocketbase/core"
|
||||||
|
"htwk-planner/service"
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -15,7 +16,25 @@ func addRoutes(app *pocketbase.PocketBase) {
|
|||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
Path: "/api/fetchPlans",
|
Path: "/api/fetchPlans",
|
||||||
Handler: func(c echo.Context) error {
|
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{
|
Middlewares: []echo.MiddlewareFunc{
|
||||||
apis.ActivityLogger(app),
|
apis.ActivityLogger(app),
|
||||||
|
9
main.go
9
main.go
@ -1,22 +1,13 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/labstack/echo/v5"
|
|
||||||
"github.com/pocketbase/pocketbase"
|
"github.com/pocketbase/pocketbase"
|
||||||
"github.com/pocketbase/pocketbase/core"
|
|
||||||
"log"
|
"log"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
app := pocketbase.New()
|
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)
|
addRoutes(app)
|
||||||
|
|
||||||
if err := app.Start(); err != nil {
|
if err := app.Start(); err != nil {
|
||||||
|
@ -3,6 +3,10 @@ package model
|
|||||||
type SeminarGroup struct {
|
type SeminarGroup struct {
|
||||||
University string
|
University string
|
||||||
GroupShortcut string
|
GroupShortcut string
|
||||||
|
GroupId string
|
||||||
|
Course string
|
||||||
|
Faculty string
|
||||||
|
FacultyId string
|
||||||
Events []Events
|
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 (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -13,7 +13,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func fetchHTWK(c echo.Context, app *pocketbase.PocketBase) error {
|
func FetchHTWK(c echo.Context, app *pocketbase.PocketBase) error {
|
||||||
|
|
||||||
var seminarGroups []model.SeminarGroup
|
var seminarGroups []model.SeminarGroup
|
||||||
|
|
||||||
@ -109,11 +109,6 @@ func toEvents(tables [][]*html.Node, days []string) []model.Events {
|
|||||||
Notes: getTextContent(tableData[7]),
|
Notes: getTextContent(tableData[7]),
|
||||||
BookedAt: getTextContent(tableData[8]),
|
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