Add flag to specify number of articles per source

This commit is contained in:
Nate Dobbins 2019-06-17 13:22:12 -05:00 committed by Drew DeVault
parent b0904bf2ae
commit 4c35eaad3b

View file

@ -27,12 +27,13 @@ type Article struct {
func main() { func main() {
var ( var (
narticles int = 3 narticles int = 3
summaryLen int = 256 perSource int = 1
summaryLen int = 256
sources []*url.URL sources []*url.URL
) )
opts, optind, err := getopt.Getopts(os.Args[1:], "l:n:s:") opts, optind, err := getopt.Getopts(os.Args[1:], "l:n:p:s:")
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -48,6 +49,11 @@ func main() {
if err != nil { if err != nil {
panic(err) panic(err)
} }
case 'p':
perSource, err = strconv.Atoi(opt.Value)
if err != nil {
panic(err)
}
case 's': case 's':
u, err := url.Parse(opt.Value) u, err := url.Parse(opt.Value)
if err != nil { if err != nil {
@ -103,17 +109,22 @@ func main() {
log.Printf("Warning: feed %s has no items", feed.Title) log.Printf("Warning: feed %s has no items", feed.Title)
continue continue
} }
item := feed.Items[0] items := feed.Items
summary := runewidth.Truncate( if len(items) > perSource {
policy.Sanitize(item.Summary), summaryLen, "…") items = items[:perSource]
articles = append(articles, &Article{ }
Date: item.Date, for _, item := range items {
SourceLink: feed.Link, summary := runewidth.Truncate(
SourceTitle: feed.Title, policy.Sanitize(item.Summary), summaryLen, "…")
Summary: template.HTML(summary), articles = append(articles, &Article{
Title: item.Title, Date: item.Date,
Link: item.Link, SourceLink: feed.Link,
}) SourceTitle: feed.Title,
Summary: template.HTML(summary),
Title: item.Title,
Link: item.Link,
})
}
} }
sort.Slice(articles, func(i, j int) bool { sort.Slice(articles, func(i, j int) bool {
return articles[i].Date.After(articles[j].Date) return articles[i].Date.After(articles[j].Date)