package nomad import ( "sort" "github.com/mmcdole/gofeed" ) type Item struct { URL Source Title string PubDate int64 } type itemList []Item func (l itemList) Len() int { return len(l) } func (l itemList) Less(i, j int) bool { return l[i].PubDate < l[j].PubDate } func (l itemList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } func FetchRSS(feedSource Source) (items []Item, err error) { rd, err := feedSource.Fetch() if err != nil { return nil, err } feedParser := gofeed.NewParser() feed, err := feedParser.ParseString(rd) if err != nil { return nil, err } for _, item := range feed.Items { items = append(items, Item{ URL: NewSoupSource(item.Link), Title: item.Title, PubDate: item.PublishedParsed.Unix(), }) } sort.Sort(itemList(items)) return items, nil }