Add support for basic CLI flags

This commit is contained in:
2016-12-15 23:58:07 +00:00
parent 99e66816c3
commit 237e3cd889
2 changed files with 74 additions and 40 deletions

View File

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

70
main.go Normal file
View File

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