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:
masterElmar
2023-12-13 19:33:24 +01:00
committed by GitHub
2 changed files with 28 additions and 5 deletions

View File

@@ -76,7 +76,7 @@ func formatEntriesToEvents(entries []model.SportEntry) []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)
for j := range eventStarts {
@@ -84,12 +84,12 @@ func formatEntriesToEvents(entries []model.SportEntry) []model.Event {
end, _ := types.ParseDateTime(eventEnds[j].In(time.UTC))
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()),
Week: strconv.Itoa(23),
Start: start,
End: end,
Name: entry.Title + " " + entry.Details.Type,
Name: entry.Title + " " + entry.Details.Type + " (" + entry.ID + ")",
EventType: entry.Details.Type,
Prof: entry.Details.CourseLead.Name,
Rooms: entry.Details.Location.Name,
@@ -387,6 +387,7 @@ func htmlRequest(url string) (*goquery.Document, error) {
// May be improved in the future.
func fetchHtwkSportCourse(doc *goquery.Document) ([]model.SportEntry, error) {
var events []model.SportEntry
germanTime, _ := time.LoadLocation("Europe/Berlin")
if doc.Find("h1").Text() == "Aktuelle Sportangebote" {
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])
}
event.ID = parseEventID(fullTitle)
s.NextFiltered("table.eventDetails").Find("tr").Each(func(i int, s *goquery.Selection) {
key := strings.TrimSpace(s.Find("td").First().Text())
value := strings.TrimSpace(s.Find("td").Last().Text())
@@ -414,8 +417,8 @@ func fetchHtwkSportCourse(doc *goquery.Document) ([]model.SportEntry, error) {
case "Zeitraum":
dates := strings.Split(value, "-")
if len(dates) == 2 {
startDate, _ := time.Parse("02.01.2006", strings.TrimSpace(dates[0]))
endDate, _ := time.Parse("02.01.2006", strings.TrimSpace(dates[1]))
startDate, _ := time.ParseInLocation("02.01.2006", strings.TrimSpace(dates[0]), germanTime)
endDate, _ := time.ParseInLocation("02.01.2006", strings.TrimSpace(dates[1]), germanTime)
details.DateRange = model.DateRange{Start: startDate, End: endDate}
}
case "Zyklus":
@@ -471,3 +474,22 @@ func fetchHtwkSportCourse(doc *goquery.Document) ([]model.SportEntry, error) {
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
}