summaryrefslogtreecommitdiff
path: root/rss.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-07-24 16:09:08 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-07-24 16:09:08 +0200
commit43b0fbc7131cd2fb073a42b39fd9390e41f1e03d (patch)
tree3cd68889a9d6cf84aceceea2fc9609badb2062c5 /rss.go
parent978f9030b44c2ff04623a28227bf3c806ebbf051 (diff)
Automatic RSS watcher
Diffstat (limited to 'rss.go')
-rw-r--r--rss.go78
1 files changed, 35 insertions, 43 deletions
diff --git a/rss.go b/rss.go
index 0c42046..bde4adf 100644
--- a/rss.go
+++ b/rss.go
@@ -2,6 +2,8 @@ package main
import (
"fmt"
+ "log"
+ "time"
"dim13.org/rss"
irc "github.com/fluffle/goirc/client"
@@ -11,56 +13,46 @@ var Feed = map[string]string{
"News": `https://www.linux.org.ru/section-rss.jsp?section=1`,
"Forum": `https://www.linux.org.ru/section-rss.jsp?section=2`,
"Gallery": `https://www.linux.org.ru/section-rss.jsp?section=3`,
+ "Polls": `https://www.linux.org.ru/section-rss.jsp?section=5`,
"OpenNET": `http://www.opennet.ru/opennews/opennews_all_noadv.rss`,
"Undeadly": `http://undeadly.org/cgi?action=rss`,
+ "Kernel": `https://www.kernel.org/feeds/kdist.xml`,
}
-type RSS struct{ Command }
+type News struct {
+ Source string
+ Item rss.Item
+}
-func (v RSS) Handle(conn *irc.Conn, line *irc.Line) {
- news, err := rss.Fetch(v.Arg)
- if err != nil {
- conn.Privmsg(line.Target(), err.Error())
- return
- }
- if line.Public() && len(news.Channel.Items) > 3 {
- news.Channel.Items = news.Channel.Items[:3]
- }
- for n, i := range news.Channel.Items {
- s := fmt.Sprintf("%2d. %v - %v", n+1, i.Title, i.Link)
- conn.Privmsg(line.Target(), s)
+const timeOut = 5 * time.Minute
+
+var news = make(chan News)
+
+func ShowNews(conn *irc.Conn, _ *irc.Line) {
+ for {
+ n := <-news
+ s := fmt.Sprintf("%v: %v - %v", n.Source,
+ n.Item.Title, n.Item.Link)
+ conn.Privmsg(*room, s)
}
}
func init() {
- Register("news", &RSS{
- Command{
- Help: "LOR news (msg private to see all)",
- Arg: Feed["News"],
- },
- })
- Register("forum", &RSS{
- Command{
- Help: "LOR forum (msg private to see all)",
- Arg: Feed["Forum"],
- },
- })
- Register("gallery", &RSS{
- Command{
- Help: "LOR gallery (msg private to see all)",
- Arg: Feed["Gallery"],
- },
- })
- Register("bsd", &RSS{
- Command{
- Help: "Undeadly news (msg private to see all)",
- Arg: Feed["Undeadly"],
- },
- })
- Register("opennet", &RSS{
- Command{
- Help: "OpenNET news (msg private to see all)",
- Arg: Feed["OpenNET"],
- },
- })
+ for k, v := range Feed {
+ go func(c chan News, source, url string) {
+ for {
+ to := time.Now().Add(-timeOut)
+ r, err := rss.Fetch(url)
+ if err != nil {
+ log.Println(err)
+ }
+ for _, i := range r.Channel.Items {
+ if i.PubDate.After(to) {
+ c <- News{source, i}
+ }
+ }
+ time.Sleep(timeOut)
+ }
+ }(news, k, v)
+ }
}