From 816bb5df1d112f54fdbec792d7b5e4a057ed11e7 Mon Sep 17 00:00:00 2001 From: an Date: Wed, 21 Feb 2018 21:39:01 +0100 Subject: [PATCH 1/4] Replace github.com/jteeuwen/... with own mirrors --- modules/rss.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/modules/rss.go b/modules/rss.go index d0a756f..d2b12d5 100644 --- a/modules/rss.go +++ b/modules/rss.go @@ -15,10 +15,9 @@ import ( "os" "time" + "git.dnix.de/an/rss" "git.dnix.de/an/xlog" - - gorss "github.com/jteeuwen/go-pkg-rss" - "github.com/jteeuwen/go-pkg-xmlx" + "git.dnix.de/an/xmlx" ) var hideOutput = true @@ -54,7 +53,7 @@ func rssHandleMessage(m *Message) { } func rssPollFeed(uri string, timeout int, cr xmlx.CharsetFunc) { - feed := gorss.New(timeout, true, rssChanHandler, rssItemHandler) + feed := rss.New(timeout, true, rssChanHandler, rssItemHandler) for { xlog.Info("Polling feed: %s", uri) if err := feed.Fetch(uri, cr); err != nil { @@ -66,11 +65,11 @@ func rssPollFeed(uri string, timeout int, cr xmlx.CharsetFunc) { } } -func rssChanHandler(feed *gorss.Feed, newchannels []*gorss.Channel) { +func rssChanHandler(feed *rss.Feed, newchannels []*rss.Channel) { //SayCh <- fmt.Sprintf("%s\n[RSS] %d new channel(s) in %s", "*", len(newchannels), feed.Url) } -func rssItemHandler(feed *gorss.Feed, ch *gorss.Channel, newitems []*gorss.Item) { +func rssItemHandler(feed *rss.Feed, ch *rss.Channel, newitems []*rss.Item) { if hideOutput { return } From 574fe38d38fa92f030e9d47f47eaf5725a0831eb Mon Sep 17 00:00:00 2001 From: an Date: Wed, 21 Feb 2018 22:30:24 +0100 Subject: [PATCH 2/4] rss -> gorss --- modules/rss.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/rss.go b/modules/rss.go index d2b12d5..5934ddd 100644 --- a/modules/rss.go +++ b/modules/rss.go @@ -15,7 +15,7 @@ import ( "os" "time" - "git.dnix.de/an/rss" + "git.dnix.de/an/gorss" "git.dnix.de/an/xlog" "git.dnix.de/an/xmlx" ) @@ -53,7 +53,7 @@ func rssHandleMessage(m *Message) { } func rssPollFeed(uri string, timeout int, cr xmlx.CharsetFunc) { - feed := rss.New(timeout, true, rssChanHandler, rssItemHandler) + feed := gorss.New(timeout, true, rssChanHandler, rssItemHandler) for { xlog.Info("Polling feed: %s", uri) if err := feed.Fetch(uri, cr); err != nil { @@ -65,11 +65,11 @@ func rssPollFeed(uri string, timeout int, cr xmlx.CharsetFunc) { } } -func rssChanHandler(feed *rss.Feed, newchannels []*rss.Channel) { +func rssChanHandler(feed *gorss.Feed, newchannels []*gorss.Channel) { //SayCh <- fmt.Sprintf("%s\n[RSS] %d new channel(s) in %s", "*", len(newchannels), feed.Url) } -func rssItemHandler(feed *rss.Feed, ch *rss.Channel, newitems []*rss.Item) { +func rssItemHandler(feed *gorss.Feed, ch *gorss.Channel, newitems []*gorss.Item) { if hideOutput { return } From 9185d5777df04119dc45bb9baef287ada044d6bf Mon Sep 17 00:00:00 2001 From: an Date: Sat, 21 Apr 2018 09:35:47 +0200 Subject: [PATCH 3/4] rss.go: fixed imports --- modules/rss.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/rss.go b/modules/rss.go index 5934ddd..9d6c177 100644 --- a/modules/rss.go +++ b/modules/rss.go @@ -15,9 +15,9 @@ import ( "os" "time" - "git.dnix.de/an/gorss" + gorss "git.dnix.de/an/go-pkg-rss" + xmlx "git.dnix.de/an/go-pkg-xmlx" "git.dnix.de/an/xlog" - "git.dnix.de/an/xmlx" ) var hideOutput = true From eb82de80e824b831cadb5521375c526e12f1f94c Mon Sep 17 00:00:00 2001 From: an Date: Sat, 21 Apr 2018 09:38:42 +0200 Subject: [PATCH 4/4] fix --- modules/rss.go | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 modules/rss.go diff --git a/modules/rss.go b/modules/rss.go new file mode 100644 index 0000000..9d6c177 --- /dev/null +++ b/modules/rss.go @@ -0,0 +1,86 @@ +// vi:ts=4:sts=4:sw=4:noet:tw=72 +// +// This code is mostly derived from the example code by Jim Teeuwen +// and is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication +// license. + +package modules + +import ( + "bufio" + "errors" + "flag" + "fmt" + "io" + "os" + "time" + + gorss "git.dnix.de/an/go-pkg-rss" + xmlx "git.dnix.de/an/go-pkg-xmlx" + "git.dnix.de/an/xlog" +) + +var hideOutput = true +var rssFeeds = flag.String("rss_feeds", "feeds.txt", "Feed list file") +var rssChannel = flag.String("rss_channel", "", "Target channel") + +func init() { + MsgFuncs["rss"] = rssHandleMessage + RunFuncs["rss"] = rssRun +} + +func rssRun() { + time.Sleep(5 * time.Second) + file, err := os.Open(*rssFeeds) + if err != nil { + xlog.Fatal(err.Error()) + } + defer file.Close() + scanner := bufio.NewScanner(file) + for scanner.Scan() { + go rssPollFeed(scanner.Text(), 5, rssCharsetReader) + } + if err := scanner.Err(); err != nil { + xlog.Fatal(err.Error()) + } + go func() { + time.Sleep(60 * time.Second) + hideOutput = false + }() +} + +func rssHandleMessage(m *Message) { +} + +func rssPollFeed(uri string, timeout int, cr xmlx.CharsetFunc) { + feed := gorss.New(timeout, true, rssChanHandler, rssItemHandler) + for { + xlog.Info("Polling feed: %s", uri) + if err := feed.Fetch(uri, cr); err != nil { + xlog.Info("[e] %s: %s", "*", uri, err) + SayCh <- fmt.Sprintf("%s\n[RSS] Error %s: %s", *rssChannel, uri, err) + return + } + <-time.After(time.Duration(feed.SecondsTillUpdate() * 1e9)) + } +} + +func rssChanHandler(feed *gorss.Feed, newchannels []*gorss.Channel) { + //SayCh <- fmt.Sprintf("%s\n[RSS] %d new channel(s) in %s", "*", len(newchannels), feed.Url) +} + +func rssItemHandler(feed *gorss.Feed, ch *gorss.Channel, newitems []*gorss.Item) { + if hideOutput { + return + } + for _, ni := range newitems { + SayCh <- fmt.Sprintf("%s\n[RSS] %v - %v", *rssChannel, ni.Title, ni.Links[0].Href) + } +} + +func rssCharsetReader(charset string, r io.Reader) (io.Reader, error) { + if charset == "ISO-8859-1" || charset == "iso-8859-1" { + return r, nil + } + return nil, errors.New("Unsupported character set encoding: " + charset) +}