diff --git a/rss/feed.go b/rss/feed.go index dbcfe31..9c27918 100644 --- a/rss/feed.go +++ b/rss/feed.go @@ -15,6 +15,7 @@ import ( type Feed struct { Updated time.Time + Title string Items []string ItemFilter string ContentFilter string @@ -23,7 +24,8 @@ type Feed struct { } func (feed *Feed) String() string { - return fmt.Sprintf("Updated: %v, Items: %v, ItemFilter: %q, ContentFilter: %q, Link: %v, Interval: %s", + return fmt.Sprintf("Title: %s, Updated: %v, Items: %v, ItemFilter: %q, ContentFilter: %q, Link: %v, Interval: %s", + feed.Title, feed.Updated.Local(), feed.Items, feed.ItemFilter, @@ -103,6 +105,7 @@ func (feed *Feed) fromGofeed(gofeed *gofeed.Feed) ([]*Item, error) { return nil, err } feed.Updated = *updated + feed.Title = gofeed.Title return newitems, nil } diff --git a/rss/xml.go b/rss/xml.go new file mode 100644 index 0000000..1ab7846 --- /dev/null +++ b/rss/xml.go @@ -0,0 +1,29 @@ +package rss + +import ( + "fmt" + "net/url" + + "github.com/gorilla/feeds" +) + +func ToRSS(feed *Feed, items []*Item) (string, error) { + root := &feeds.Feed{ + Title: feed.Title, + Link: &feeds.Link{Href: feed.Link}, + Description: fmt.Sprintf("/%s/ /%s/", feed.ItemFilter, feed.ContentFilter), + Created: feed.Updated, + } + root.Items = make([]*feeds.Item, len(items)) + for i := range items { + v := &url.Values{} + v.Add("url", feed.ID()+"."+items[i].ID()) + root.Items[i] = &feeds.Item{ + Title: items[i].Name, + Link: &feeds.Link{Href: "/api/feed/item?" + v.Encode()}, + Description: items[i].Content, + Created: items[i].TS, + } + } + return root.ToRss() +}