2023-04-28 15:34:26 +00:00
|
|
|
package main
|
|
|
|
|
2023-04-28 16:24:02 +00:00
|
|
|
import (
|
|
|
|
"log"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
func WaitUntilNextUpdate() {
|
|
|
|
now := time.Now()
|
|
|
|
dur := now.Truncate(time.Hour).Add(time.Hour).Sub(now)
|
|
|
|
log.Println("sleeping for", dur.Round(time.Second))
|
|
|
|
time.Sleep(dur)
|
|
|
|
}
|
|
|
|
|
|
|
|
func contains(rss *Rss, a Item) bool {
|
|
|
|
if rss == nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
for _, x := range rss.Channel.Items {
|
|
|
|
if x.Title == a.Title {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
2023-04-28 15:34:26 +00:00
|
|
|
func main() {
|
2023-04-28 16:24:02 +00:00
|
|
|
var oldRss *Rss
|
|
|
|
for {
|
|
|
|
rss, err := FetchStackerNewsRssFeed()
|
|
|
|
if err != nil {
|
|
|
|
log.Println(err)
|
|
|
|
WaitUntilNextUpdate()
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, item := range rss.Channel.Items {
|
|
|
|
// TODO: We ignore errors during sending items to telegram.
|
|
|
|
// This means these items will be missed since they will be skipped in the next run
|
|
|
|
if contains(oldRss, item) {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
err := SendItemToTelegram(&item)
|
|
|
|
if err != nil {
|
|
|
|
log.Println(err)
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
oldRss = rss
|
|
|
|
WaitUntilNextUpdate()
|
|
|
|
}
|
2023-04-28 15:34:26 +00:00
|
|
|
}
|