add fetcher for semgrp from xml

This commit is contained in:
Elmar Kresse
2023-06-26 15:23:14 +02:00
parent 0ca48caef0
commit f033161e57
6 changed files with 137 additions and 17 deletions

View File

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

View File

@ -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 {

View File

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

View 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"`
}

View 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
}

View File

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