diff --git a/handlers.go b/handlers.go index a312943..d27bc96 100644 --- a/handlers.go +++ b/handlers.go @@ -32,6 +32,12 @@ func (a *App) pageIndex(w http.ResponseWriter, r *http.Request, vars handlerVars }) } +func (a *App) pageNews(w http.ResponseWriter, r *http.Request, vars handlerVars) error { + return a.templates["news"].Execute(w, map[string]interface{}{ + "Reddit": a.news, + }) +} + func (a *App) pageServer(w http.ResponseWriter, r *http.Request, vars handlerVars) error { id := vars["id"] server, err := a.store.GetServer(id) diff --git a/main.go b/main.go index 27547b6..18962eb 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,7 @@ import ( "strings" "time" + "github.com/SlyMarbo/rss" "github.com/gorilla/mux" ) @@ -31,6 +32,7 @@ type App struct { web *http.Server store Storage templates map[string]*template.Template + news []*rss.Item } func New(c Conf) (*App, error) { @@ -54,6 +56,7 @@ func New(c Conf) (*App, error) { r := mux.NewRouter() r.Handle("/", handler(a.pageIndex)) + r.Handle("/news", handler(a.pageNews)) r.Handle("/server/{id}", handler(a.pageServer)) r.Handle("/server/{id}/daily", handler(a.pageDailyChart)) r.Handle("/server/{id}/weekly", handler(a.pageWeeklyChart)) @@ -81,6 +84,8 @@ func (a *App) Run() error { a.Log("Running updater") go a.runUpdater(webClient) + a.Log("Running reddit watcher") + go a.runRedditWatcher(webClient) a.Log("Running server on %s", a.conf.WebAddr) return a.web.ListenAndServe() diff --git a/reddit.go b/reddit.go new file mode 100644 index 0000000..f079999 --- /dev/null +++ b/reddit.go @@ -0,0 +1,33 @@ +package ss13_se + +import ( + "net/http" + "time" + + "github.com/SlyMarbo/rss" +) + +const redditURL string = "https://www.reddit.com/r/SS13/search.rss?q=ss13.se&restrict_sr=on&t=year&sort=new" + +func (a *App) runRedditWatcher(webClient *http.Client) { + f := func(url string) (*http.Response, error) { + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return nil, err + } + req.Header.Add("User-Agent", userAgent) + return webClient.Do(req) + } + + for { + start := time.Now() + feed, err := rss.FetchByFunc(f, redditURL) + dur := time.Since(start) + a.Log("Updated reddit in %s, errors: %v", dur, err) + + if err == nil { + a.news = feed.Items + } + time.Sleep(a.conf.ScrapeTimeout) + } +} diff --git a/templates.go b/templates.go index be3fb62..a9b6e6d 100644 --- a/templates.go +++ b/templates.go @@ -86,6 +86,7 @@ var tmplList = map[string]string{

Current # of servers: {{.TotalServers}}

Current # of players: {{.Hub.Players}}

Global stats
+Latest news

@@ -105,6 +106,15 @@ var tmplList = map[string]string{
{{end}} +`, + + "news": `{{define "title"}}News{{end}} +{{define "body"}} +

Latest mentions on reddit

+ +{{end}} `, "server": `{{define "title"}}{{.Server.Title}}{{end}}