This commit is contained in:
Jan 2024-09-15 19:10:19 +02:00
parent 7fdeec67ce
commit 78346cabaf
4 changed files with 119 additions and 0 deletions

28
scrape/mensa.go Normal file
View File

@ -0,0 +1,28 @@
package scrape
import (
"io"
"strings"
"github.com/PuerkitoBio/goquery"
)
func ScrapeMensa(h io.ReadCloser) []string {
var mensas []string
doc, err := goquery.NewDocumentFromReader(h)
if err != nil {
return []string{}
}
doc.Find("a.primary").Each(func(i int, s *goquery.Selection) {
href, _ := s.Attr("href")
print(href)
mensa := strings.Split(href, "/")[1]
mensas = append(mensas, string(mensa))
})
return mensas
}

View File

@ -1 +1,42 @@
package server package server
import (
"github.com/LeRoid-hub/Mensa-API/cache"
"github.com/LeRoid-hub/Mensa-API/fetch"
"github.com/LeRoid-hub/Mensa-API/scrape"
"github.com/gin-gonic/gin"
)
func city(c *gin.Context) {
city := c.Param("city")
if city == "" {
c.JSON(400, gin.H{
"error": "city is required",
})
return
}
if cache.HasCacheData(city) {
c.JSON(200, cache.GetCacheData(city))
return
}
resp, err := fetch.Fetch(city)
if err != nil {
c.JSON(500, gin.H{
"error": err.Error(),
})
return
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
c.JSON(500, gin.H{
"error": "status code is not 200",
})
return
}
scraped := scrape.ScrapeState(resp.Body)
c.JSON(200, scraped)
}

View File

@ -1 +1,49 @@
package server package server
import (
"github.com/LeRoid-hub/Mensa-API/cache"
"github.com/LeRoid-hub/Mensa-API/fetch"
"github.com/LeRoid-hub/Mensa-API/scrape"
"github.com/gin-gonic/gin"
)
func mensa(c *gin.Context) {
mensa := c.Param("mensa")
if mensa == "" {
c.JSON(400, gin.H{
"error": "mensa is required",
})
return
}
city := c.Param("city")
if city == "" {
c.JSON(400, gin.H{
"error": "city is required",
})
return
}
if cache.HasCacheData(city + "/" + mensa) {
c.JSON(200, cache.GetCacheData(mensa))
return
}
resp, err := fetch.Fetch(mensa)
if err != nil {
c.JSON(500, gin.H{
"error": err.Error(),
})
return
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
c.JSON(500, gin.H{
"error": "status code is not 200",
})
return
}
scraped := scrape.ScrapeState(resp.Body)
c.JSON(200, scraped)
}

View File

@ -12,5 +12,7 @@ func Run() {
}) })
}) })
r.GET("/state/:state", state) r.GET("/state/:state", state)
r.GET("/city/:city", city)
r.GET("/mensa/:city/:mensa", mensa)
r.Run() // listen and serve on r.Run() // listen and serve on
} }