56 lines
1.0 KiB
Go
56 lines
1.0 KiB
Go
package rss
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"local/rssmon3/config"
|
|
"sort"
|
|
|
|
"github.com/gorilla/feeds"
|
|
)
|
|
|
|
func TaggedFeeds(tag string) ([]*Feed, error) {
|
|
db := config.Values().DB
|
|
feedNames, err := db.List([]string{nsFeeds})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
results := []*Feed{}
|
|
for _, feedName := range feedNames {
|
|
f := newFeed(feedName)
|
|
if err := f.Load(); err != nil {
|
|
return nil, err
|
|
}
|
|
for i := range f.Tags {
|
|
if f.Tags[i] == tag {
|
|
results = append(results, f)
|
|
}
|
|
}
|
|
}
|
|
return results, nil
|
|
}
|
|
|
|
func WriteFeed(w io.Writer, tag string, items []*Item) error {
|
|
sort.Sort(Items(items))
|
|
feed := &feeds.Feed{
|
|
Title: tag,
|
|
Link: &feeds.Link{},
|
|
Description: tag,
|
|
Items: make([]*feeds.Item, len(items)),
|
|
}
|
|
for i, item := range items {
|
|
feed.Items[i] = &feeds.Item{
|
|
Title: item.Title,
|
|
Link: &feeds.Link{Href: item.Link},
|
|
Description: item.Content,
|
|
Created: item.TS,
|
|
}
|
|
}
|
|
s, err := feed.ToRss()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Fprintf(w, "%s\n", s)
|
|
return nil
|
|
}
|