mirror of
https://github.com/LeRoid-hub/Mensa-API.git
synced 2025-01-31 03:34:57 +00:00
commit
d9c073919e
28
scrape/mensa.go
Normal file
28
scrape/mensa.go
Normal 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
|
||||||
|
|
||||||
|
}
|
@ -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)
|
||||||
|
}
|
||||||
|
@ -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)
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user