rss and rss item and encode
Former-commit-id: 333b5635cc0eb22964403cc78f660e02a830f077
This commit is contained in:
41
rss/feed.go
41
rss/feed.go
@@ -13,24 +13,30 @@ import (
|
||||
|
||||
const NSFeeds = "NSFeeds"
|
||||
|
||||
type feed struct {
|
||||
type Feed struct {
|
||||
Key string
|
||||
URL string
|
||||
Updated time.Time
|
||||
TitleFilter string
|
||||
ContentFilter string
|
||||
Tags []string
|
||||
*config.Encodable
|
||||
}
|
||||
|
||||
func newFeed(key string) *feed {
|
||||
return &feed{
|
||||
Key: key,
|
||||
Encodable: &config.Encodable{},
|
||||
func newFeed(key string) *Feed {
|
||||
return &Feed{
|
||||
Key: key,
|
||||
}
|
||||
}
|
||||
|
||||
func (f *feed) load() error {
|
||||
func (f *Feed) Encode() ([]byte, error) {
|
||||
return config.Encode(f)
|
||||
}
|
||||
|
||||
func (f *Feed) Decode(b []byte) error {
|
||||
return config.Decode(b, f)
|
||||
}
|
||||
|
||||
func (f *Feed) load() error {
|
||||
if f.Key == "" {
|
||||
return errors.New("cannot load nil feed")
|
||||
}
|
||||
@@ -42,7 +48,7 @@ func (f *feed) load() error {
|
||||
return f.Decode(b)
|
||||
}
|
||||
|
||||
func (f *feed) pull() error {
|
||||
func (f *Feed) pull() error {
|
||||
if f.URL == "" {
|
||||
if err := f.load(); err != nil {
|
||||
return err
|
||||
@@ -61,21 +67,20 @@ func (f *feed) pull() error {
|
||||
|
||||
itemTSs := []*time.Time{}
|
||||
for _, i := range gofeed.Items {
|
||||
ts := latestTSPtr(i.UpdatedParsed, i.PublishedParsed)
|
||||
itemTSs = append(itemTSs, &ts)
|
||||
if ts.Before(f.Updated) {
|
||||
item, err := newItem(i, f.ContentFilter, f.Key)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
continue
|
||||
}
|
||||
itemTSs = append(itemTSs, &item.TS)
|
||||
if item.TS.Before(f.Updated) {
|
||||
log.Println("Skipping old item")
|
||||
continue
|
||||
}
|
||||
if ok := regexp.MustCompile(f.TitleFilter).MatchString(i.Title); !ok {
|
||||
if ok := regexp.MustCompile(f.TitleFilter).MatchString(item.Title); !ok {
|
||||
log.Println("Skipping bad titled item")
|
||||
continue
|
||||
}
|
||||
item, err := newItem(i, f.ContentFilter)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
continue
|
||||
}
|
||||
if err := item.save(); err != nil {
|
||||
log.Println(err)
|
||||
continue
|
||||
@@ -87,7 +92,7 @@ func (f *feed) pull() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f *feed) save() error {
|
||||
func (f *Feed) save() error {
|
||||
b, err := f.Encode()
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user