flokati/modules/feeds.go

54 lines
1.0 KiB
Go
Raw Normal View History

2024-07-05 09:58:57 +00:00
package modules
import (
"bufio"
"fmt"
"os"
"time"
"git.dnix.de/an/xlog"
"github.com/mmcdole/gofeed"
)
var feedsFeeds = flag.String("feeds_feeds", "feeds.txt", "Feed list file")
var feedsChannel = flag.String("feeds_channel", "", "Target channel")
func init() {
MsgFuncs["feeds"] = feedsHandleMessage
RunFuncs["feeds"] = feedsRun
}
func feedsRun() {
time.Sleep(1 * time.Minute)
file, err := os.Open(feedsFeeds)
if err != nil {
xlog.Fatal(err.Error())
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
go feedsPoll(scanner.Text())
}
if err := scanner.Err(); err != nil {
xlog.Fatal(err.Error())
}
}
func feedsHandleMessage(m *Message) {
}
func feedsPoll(url string) {
last := time.Now()
for {
fp := gofeed.NewParser()
feed, _ := fp.ParseURL(url)
for _, item := range feed.Items {
if item.UpdatedParsed.Unix() > last.Unix() {
SayCh <- fmt.Sprintf("%s\n[FEEDS] %s : %s - %s\n", *feedsChannel, feed.Title, item.Title, item.Link)
}
}
last = time.Now()
time.Sleep(15 * time.Minute)
}
}