mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender.git
synced 2025-08-03 10:19:14 +02:00
Merge pull request #113 from HTWK-Leipzig/82-add-university-sports-course
fix:#82 fetched internal sport course id for unique identification
This commit is contained in:
@@ -9,6 +9,7 @@ type SportEntry struct {
|
|||||||
Title string
|
Title string
|
||||||
Details EventDetails
|
Details EventDetails
|
||||||
AdditionalNote string
|
AdditionalNote string
|
||||||
|
ID string
|
||||||
}
|
}
|
||||||
|
|
||||||
// EventDetails represents detailed information about the event.
|
// EventDetails represents detailed information about the event.
|
||||||
|
@@ -76,7 +76,7 @@ func formatEntriesToEvents(entries []model.SportEntry) []model.Event {
|
|||||||
|
|
||||||
var events []model.Event
|
var events []model.Event
|
||||||
|
|
||||||
for i, entry := range entries {
|
for _, entry := range entries {
|
||||||
eventStarts, eventEnds := getWeekEvents(entry.Details.DateRange.Start, entry.Details.DateRange.End, entry.Details.Cycle)
|
eventStarts, eventEnds := getWeekEvents(entry.Details.DateRange.Start, entry.Details.DateRange.End, entry.Details.Cycle)
|
||||||
for j := range eventStarts {
|
for j := range eventStarts {
|
||||||
|
|
||||||
@@ -84,12 +84,12 @@ func formatEntriesToEvents(entries []model.SportEntry) []model.Event {
|
|||||||
end, _ := types.ParseDateTime(eventEnds[j].In(time.UTC))
|
end, _ := types.ParseDateTime(eventEnds[j].In(time.UTC))
|
||||||
|
|
||||||
var event = model.Event{
|
var event = model.Event{
|
||||||
UUID: uuid.NewSHA1(uuid.NameSpaceDNS, []byte(entry.Title+strconv.FormatInt(int64(i), 10)+entry.Details.Type)).String(),
|
UUID: uuid.NewSHA1(uuid.NameSpaceDNS, []byte(entry.Title+entry.ID+entry.Details.Type)).String(),
|
||||||
Day: toGermanWeekdayString(entry.Details.DateRange.Start.Weekday()),
|
Day: toGermanWeekdayString(entry.Details.DateRange.Start.Weekday()),
|
||||||
Week: strconv.Itoa(23),
|
Week: strconv.Itoa(23),
|
||||||
Start: start,
|
Start: start,
|
||||||
End: end,
|
End: end,
|
||||||
Name: entry.Title + " " + entry.Details.Type,
|
Name: entry.Title + " " + entry.Details.Type + " (" + entry.ID + ")",
|
||||||
EventType: entry.Details.Type,
|
EventType: entry.Details.Type,
|
||||||
Prof: entry.Details.CourseLead.Name,
|
Prof: entry.Details.CourseLead.Name,
|
||||||
Rooms: entry.Details.Location.Name,
|
Rooms: entry.Details.Location.Name,
|
||||||
@@ -387,6 +387,7 @@ func htmlRequest(url string) (*goquery.Document, error) {
|
|||||||
// May be improved in the future.
|
// May be improved in the future.
|
||||||
func fetchHtwkSportCourse(doc *goquery.Document) ([]model.SportEntry, error) {
|
func fetchHtwkSportCourse(doc *goquery.Document) ([]model.SportEntry, error) {
|
||||||
var events []model.SportEntry
|
var events []model.SportEntry
|
||||||
|
germanTime, _ := time.LoadLocation("Europe/Berlin")
|
||||||
|
|
||||||
if doc.Find("h1").Text() == "Aktuelle Sportangebote" {
|
if doc.Find("h1").Text() == "Aktuelle Sportangebote" {
|
||||||
return nil, errors.New("not a sport course page")
|
return nil, errors.New("not a sport course page")
|
||||||
@@ -406,6 +407,8 @@ func fetchHtwkSportCourse(doc *goquery.Document) ([]model.SportEntry, error) {
|
|||||||
details.Type = strings.TrimSpace(titleParts[len(titleParts)-1])
|
details.Type = strings.TrimSpace(titleParts[len(titleParts)-1])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
event.ID = parseEventID(fullTitle)
|
||||||
|
|
||||||
s.NextFiltered("table.eventDetails").Find("tr").Each(func(i int, s *goquery.Selection) {
|
s.NextFiltered("table.eventDetails").Find("tr").Each(func(i int, s *goquery.Selection) {
|
||||||
key := strings.TrimSpace(s.Find("td").First().Text())
|
key := strings.TrimSpace(s.Find("td").First().Text())
|
||||||
value := strings.TrimSpace(s.Find("td").Last().Text())
|
value := strings.TrimSpace(s.Find("td").Last().Text())
|
||||||
@@ -414,8 +417,8 @@ func fetchHtwkSportCourse(doc *goquery.Document) ([]model.SportEntry, error) {
|
|||||||
case "Zeitraum":
|
case "Zeitraum":
|
||||||
dates := strings.Split(value, "-")
|
dates := strings.Split(value, "-")
|
||||||
if len(dates) == 2 {
|
if len(dates) == 2 {
|
||||||
startDate, _ := time.Parse("02.01.2006", strings.TrimSpace(dates[0]))
|
startDate, _ := time.ParseInLocation("02.01.2006", strings.TrimSpace(dates[0]), germanTime)
|
||||||
endDate, _ := time.Parse("02.01.2006", strings.TrimSpace(dates[1]))
|
endDate, _ := time.ParseInLocation("02.01.2006", strings.TrimSpace(dates[1]), germanTime)
|
||||||
details.DateRange = model.DateRange{Start: startDate, End: endDate}
|
details.DateRange = model.DateRange{Start: startDate, End: endDate}
|
||||||
}
|
}
|
||||||
case "Zyklus":
|
case "Zyklus":
|
||||||
@@ -471,3 +474,22 @@ func fetchHtwkSportCourse(doc *goquery.Document) ([]model.SportEntry, error) {
|
|||||||
|
|
||||||
return events, nil
|
return events, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// parseEventID from fulltitle
|
||||||
|
// the event id is a number in the fulltitle thats not a time like HH:MM and shoudl be found after Nr. or Nr:
|
||||||
|
func parseEventID(fulltitle string) string {
|
||||||
|
var eventID string
|
||||||
|
var numberRegExp = regexp.MustCompile("[0-9]{1,4}")
|
||||||
|
var fulltitleParts = strings.Split(fulltitle, " ")
|
||||||
|
for i, part := range fulltitleParts {
|
||||||
|
if part == "Nr." || part == "Nr:" {
|
||||||
|
eventID = fulltitleParts[i+1]
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if eventID == "" {
|
||||||
|
eventID = numberRegExp.FindString(fulltitle)
|
||||||
|
}
|
||||||
|
return eventID
|
||||||
|
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user