summaryrefslogtreecommitdiff
path: root/rss.go
diff options
context:
space:
mode:
Diffstat (limited to 'rss.go')
-rw-r--r--rss.go77
1 files changed, 23 insertions, 54 deletions
diff --git a/rss.go b/rss.go
index 143c82b..6f5239b 100644
--- a/rss.go
+++ b/rss.go
@@ -6,7 +6,6 @@ import (
"time"
"dim13.org/rss"
- irc "github.com/fluffle/goirc/client"
)
type Feed struct {
@@ -15,34 +14,6 @@ type Feed struct {
Every time.Duration
}
-var Feeds = []Feed{
- {
- Name: "LOR News",
- URL: `https://www.linux.org.ru/section-rss.jsp?section=1`,
- Every: time.Hour,
- },
- {
- Name: "LOR Forum",
- URL: `https://www.linux.org.ru/section-rss.jsp?section=2&filter=tech`,
- Every: 5 * time.Minute,
- },
- {
- Name: "LOR Gallery",
- URL: `https://www.linux.org.ru/section-rss.jsp?section=3`,
- Every: 2 * time.Hour,
- },
- {
- Name: "LOR Polls",
- URL: `https://www.linux.org.ru/section-rss.jsp?section=5`,
- Every: 2 * time.Hour,
- },
- {
- Name: "OpenNET",
- URL: `http://www.opennet.ru/opennews/opennews_all_noadv.rss`,
- Every: 4 * time.Hour,
- },
-}
-
type News struct {
Feed
rss.Item
@@ -59,32 +30,30 @@ func (n News) String() string {
return s
}
-func ShowNews(conn *irc.Conn, room string) {
- news := make(chan News)
-
- for _, f := range Feeds {
- go func(f Feed) {
- ticker := time.NewTicker(f.Every)
- defer ticker.Stop()
- for t := range ticker.C {
- r, err := rss.Fetch(f.URL)
- if err != nil {
- log.Println(f.Name, err)
- return
- }
- to := t.Add(-f.Every)
- for _, i := range r.Channel.Items {
- if i.PubDate.After(to) {
- news <- News{f, i}
- }
- }
+func (f Feed) watch(news chan News) {
+ ticker := time.NewTicker(f.Every)
+ defer ticker.Stop()
+ for t := range ticker.C {
+ r, err := rss.Fetch(f.URL)
+ if err != nil {
+ log.Println(f.Name, err)
+ return
+ }
+ last := t.Add(-f.Every)
+ for _, i := range r.Channel.Items {
+ if i.PubDate.After(last) {
+ news <- News{f, i}
}
- }(f)
+ }
}
+}
- go func() {
- for n := range news {
- conn.Notice(room, n.String())
- }
- }()
+func Watch(msg chan string, feeds []Feed) {
+ news := make(chan News)
+ for _, feed := range feeds {
+ go feed.watch(news)
+ }
+ for n := range news {
+ msg <- fmt.Sprint(n)
+ }
}