main.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
package main import ( "fmt" "io" "strings" "io/ioutil" "log" "net/http" "encoding/csv" "github.com/mmcdole/gofeed" "sort" "os" ) func rootHandler(w http.ResponseWriter, r *http.Request) { feeds, err := getFeedList(os.Args[1]) if err != nil { log.Fatal(err) } // posts is a slice of post titles posts := make([]gofeed.Feed, 0) for _, f := range feeds { posts = append(posts, getFeed(f)) } beegFeed := gofeed.Feed{} for _, p := range posts { for _, i := range p.Items { // Overriding description to the blog title i.Description = p.Title beegFeed.Items = append(beegFeed.Items, i) } } sort.Sort(sort.Reverse(beegFeed)) for _, i := range beegFeed.Items { fmt.Fprintf(w, "<p>%s: <a href=\"%s\">%s</a></p>", i.Description, i.Link, i.Title) } } func getFeed(url string) (post gofeed.Feed) { fp := gofeed.NewParser() feed, _ := fp.ParseURL(url) return *feed } func getFeedList(url string) ([]string, error) { res, err := http.Get(url) if err != nil { log.Fatal(err) } robots, err := ioutil.ReadAll(res.Body) res.Body.Close() if err != nil { log.Fatal(err) } r := csv.NewReader(strings.NewReader(string(robots))) feeds := make([]string, 0) for { record, err := r.Read() if err == io.EOF { break } if err != nil { log.Fatal(err) } // [0] == url to a feed feeds = append(feeds, record[0]) } return feeds, err } func main() { http.HandleFunc("/", rootHandler) log.Fatal(http.ListenAndServe(":8080", nil)) } |