package fetch import ( "encoding/xml" "fmt" "github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/apis" "htwk-planner/model" "htwk-planner/service/db" "io" "net/http" ) 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 SeminarGroups(c echo.Context, app *pocketbase.PocketBase) error { result, _ := getSeminarHTML() var groups []model.SeminarGroup groups = parseSeminarGroups(result) collection, dbError := findCollection(app, "groups") if dbError != nil { return apis.NewNotFoundError("Collection not found", dbError) } dbError = db.SaveGroups(groups, collection, app) if dbError != nil { return apis.NewApiError(400, "Could not save Event into database", dbError) } return c.JSON(http.StatusOK, groups) } 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 }