Adds simple prototype to show reddit mentions

This commit is contained in:
A. Svensson 2017-07-15 19:17:51 +02:00
parent 3f38424ed9
commit 8ba561d8f2
4 changed files with 54 additions and 0 deletions

View File

@ -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 { func (a *App) pageServer(w http.ResponseWriter, r *http.Request, vars handlerVars) error {
id := vars["id"] id := vars["id"]
server, err := a.store.GetServer(id) server, err := a.store.GetServer(id)

View File

@ -7,6 +7,7 @@ import (
"strings" "strings"
"time" "time"
"github.com/SlyMarbo/rss"
"github.com/gorilla/mux" "github.com/gorilla/mux"
) )
@ -31,6 +32,7 @@ type App struct {
web *http.Server web *http.Server
store Storage store Storage
templates map[string]*template.Template templates map[string]*template.Template
news []*rss.Item
} }
func New(c Conf) (*App, error) { func New(c Conf) (*App, error) {
@ -54,6 +56,7 @@ func New(c Conf) (*App, error) {
r := mux.NewRouter() r := mux.NewRouter()
r.Handle("/", handler(a.pageIndex)) r.Handle("/", handler(a.pageIndex))
r.Handle("/news", handler(a.pageNews))
r.Handle("/server/{id}", handler(a.pageServer)) r.Handle("/server/{id}", handler(a.pageServer))
r.Handle("/server/{id}/daily", handler(a.pageDailyChart)) r.Handle("/server/{id}/daily", handler(a.pageDailyChart))
r.Handle("/server/{id}/weekly", handler(a.pageWeeklyChart)) r.Handle("/server/{id}/weekly", handler(a.pageWeeklyChart))
@ -81,6 +84,8 @@ func (a *App) Run() error {
a.Log("Running updater") a.Log("Running updater")
go a.runUpdater(webClient) go a.runUpdater(webClient)
a.Log("Running reddit watcher")
go a.runRedditWatcher(webClient)
a.Log("Running server on %s", a.conf.WebAddr) a.Log("Running server on %s", a.conf.WebAddr)
return a.web.ListenAndServe() return a.web.ListenAndServe()

33
reddit.go Normal file
View File

@ -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)
}
}

View File

@ -86,6 +86,7 @@ var tmplList = map[string]string{
<p>Current # of servers: {{.TotalServers}}</p> <p>Current # of servers: {{.TotalServers}}</p>
<p>Current # of players: {{.Hub.Players}}</p> <p>Current # of players: {{.Hub.Players}}</p>
<a href="/server/{{.Hub.ID}}">Global stats</a><br /> <a href="/server/{{.Hub.ID}}">Global stats</a><br />
<a href="/news">Latest news</a><br />
<br /> <br />
<table> <table>
<thead><tr> <thead><tr>
@ -105,6 +106,15 @@ var tmplList = map[string]string{
</tbody> </tbody>
</table> </table>
{{end}} {{end}}
`,
"news": `{{define "title"}}News{{end}}
{{define "body"}}
<h1>Latest mentions on reddit</h1>
<ul>{{range .Reddit}}
<li><a href="{{.Link}}">{{.Title}}</a></li>
{{end}}</ul>
{{end}}
`, `,
"server": `{{define "title"}}{{.Server.Title}}{{end}} "server": `{{define "title"}}{{.Server.Title}}{{end}}