From 237e3cd889c063988c004b7a5f9bc3e2ccf27066 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Thu, 15 Dec 2016 23:58:07 +0000 Subject: [PATCH] Add support for basic CLI flags --- kotaku-uk-rss.go | 44 +++--------------------------- main.go | 70 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 40 deletions(-) create mode 100644 main.go diff --git a/kotaku-uk-rss.go b/kotaku-uk-rss.go index 86ecab2..6b57d37 100644 --- a/kotaku-uk-rss.go +++ b/kotaku-uk-rss.go @@ -4,7 +4,6 @@ import ( "fmt" "log" "net/http" - "os" "sort" "sync" "time" @@ -53,12 +52,14 @@ type RssCache struct { body string } +// Set allows setting the RssCache body. func (r *RssCache) Set(value string) { r.Lock() defer r.Unlock() r.body = value } +// Get allows getting the RssCache body. func (r *RssCache) Get() string { r.RLock() defer r.RUnlock() @@ -134,7 +135,7 @@ func truncateString(s string, l int) string { return s[:end] } -func getArticlesFromUrl(url string) Articles { +func getArticlesFromURL(url string) Articles { doc := fetchDocument(url) section := extractArticleSection(doc) return parseArticleSection(section) @@ -184,9 +185,7 @@ func updateRssLoop() { articles := Articles{} for _, url := range pageUrls { fmt.Printf("fetching and parsing articles from: %s\n", url) - for _, article := range getArticlesFromUrl(url) { - articles = append(articles, article) - } + articles = append(articles, getArticlesFromURL(url)...) } fmt.Printf("building feed cache... ") @@ -197,38 +196,3 @@ func updateRssLoop() { time.Sleep(60 * time.Second) } } - -/* - Configuration -*/ - -var rootURL = "http://www.kotaku.co.uk" - -var pageUrls = []string{ - rootURL + "/", - rootURL + "/page/2/", - rootURL + "/page/3/", -} - -/* - Main... -*/ - -var rssCache = RssCache{} - -func main() { - port := "80" - if os.Getenv("PORT") != "" { - port = os.Getenv("PORT") - } - - http.HandleFunc("/rss", serveRss) - - go updateRssLoop() - - fmt.Println("Listing on port " + port + "...") - err := http.ListenAndServe(":"+port, nil) - if err != nil { - panic(err) - } -} diff --git a/main.go b/main.go new file mode 100644 index 0000000..8d2ae35 --- /dev/null +++ b/main.go @@ -0,0 +1,70 @@ +package main + +import ( + "fmt" + "log" + "net/http" + "os" + + "gopkg.in/alecthomas/kingpin.v2" +) + +// Version gets populated with version at build-time. +var Version string +var defaultPort = "8080" + +var ( + port = kingpin.Flag("port", "Port to listen to.").Short('p'). + Default(defaultPort).String() + bind = kingpin.Flag("bind", "Bind address.").Short('b'). + Default("0.0.0.0").String() + version = kingpin.Flag("version", "Print version info."). + Short('v').Bool() +) + +/* + Configuration +*/ + +var rootURL = "http://www.kotaku.co.uk" + +var pageUrls = []string{ + rootURL + "/", + rootURL + "/page/2/", + rootURL + "/page/3/", +} + +/* + Main... +*/ + +var rssCache = RssCache{} + +func printVersion() { + fmt.Println("kotaku-uk-rss " + Version) +} + +func startServer() { + if *port == defaultPort { + if envPort := os.Getenv("PORT"); envPort != "" { + *port = envPort + } + } + + http.HandleFunc("/rss", serveRss) + + address := *bind + ":" + *port + fmt.Println("Listening on " + address) + log.Fatal(http.ListenAndServe(address, nil)) +} + +func main() { + kingpin.Parse() + + if *version { + printVersion() + } else { + go updateRssLoop() + startServer() + } +}