This repository has been archived on 2024-07-28. You can view files and clone it, but cannot push or open issues or pull requests.
akl/akl.go

130 lines
3.3 KiB
Go

package main
import (
"context"
"fmt"
"log"
"time"
"github.com/mmcdole/gofeed"
)
var feeds = []string{
"http://anarchief.org/w/index.php?title=Special:NewPages&feed=rss",
"http://www.christianarchy.nl/feeds/posts/default?alt=rss",
"https://1872dh.noblogs.org/feed",
"https://aagu.nl/rss",
"https://abcnijmegen.wordpress.com/feed",
"https://afadenhaag.wordpress.com/feed",
"https://afanl.wordpress.com/rss",
"https://afarotterdam.noblogs.org/feed",
"https://affverzet.wordpress.com/feed",
"https://anticrust0.noblogs.org/feed",
"https://antifabrabant.noblogs.org/rss",
"https://antithese.blackblogs.org/feed",
"https://autonomenbrabant.blackblogs.org/feed",
"https://bondprecairewoonvormen.nl/feed",
"https://buitendeorde.org/categorie/nieuws/rss",
"https://crimethinc.com/feed/nl",
"https://gentabc.noblogs.org/feed",
"https://hetactiefonds.nl/feed",
"https://indy.puscii.nl/rss.xml",
"https://jokekaviaar.nl/rss",
"https://kafka.nl/feed",
"https://kraai.noblogs.org/rss",
"https://libertaireorde.wordpress.com/feed",
"https://nobordercamps.eu/rss",
"https://onderstroom.red/alle-afleveringen/rss",
"https://opstand.noblogs.org/feed",
"https://peterstormt.nl/author/ravotr/rss",
"https://pinksterlanddagen.org/rss",
"https://rotterdamserats.blackblogs.org/rss",
"https://rumoer.noblogs.org/rss",
"https://stopwapenhandel.org/rss",
"https://tabularasa.blackblogs.org/feed",
"https://tanarchos.nl/feed",
"https://thebarricade.noblogs.org/feed",
"https://vloerwerk.org/feed",
"https://vrijesocialist.wordpress.com/rss",
"https://vrijparkerenleiden.blackblogs.org/events/rss",
"https://vrijparkerenleiden.blackblogs.org/rss",
"https://www.2dh5.nl/rss",
"https://www.agamsterdam.org/rss",
"https://www.burojansen.nl/rss",
"https://www.doorbraak.eu/feed",
"https://www.globalinfo.nl/feed",
"https://www.grutjes.nl/feed",
"https://www.hierlinksaf.nl/Podcast/ABC/feed.xml",
"https://www.hierlinksaf.nl/Podcast/Audioboek/feed.xml",
"https://www.konfrontatie.nl/recente-bijdragen?format=feed&type=rss",
"https://www.vrijebond.org/feed",
"https://zwartetulp.noblogs.org/rss",
}
// parseRSSFeed parses a RSS feed.
func parseRSSFeed(url string) (gofeed.Feed, error) {
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel()
feedParser := gofeed.NewParser()
feed, err := feedParser.ParseURLWithContext(url, ctx)
if err != nil {
return gofeed.Feed{}, fmt.Errorf("parseRSSFeed: unable to parse %s: %w", url, err)
}
return *feed, nil
}
// item represents a single RSS feed item.
type item struct {
link string
published *time.Time
title string
}
func linksFromFeed(feed string, ch chan<- []item) {
var items []item
parsed, err := parseRSSFeed(feed)
if err != nil {
log.Fatal(err)
}
now := time.Now()
lastMonth := now.AddDate(0, -1, 0)
for _, i := range parsed.Items {
if i.PublishedParsed.Before(lastMonth) {
continue
}
items = append(items, item{
link: i.Link,
published: i.PublishedParsed,
title: i.Title,
})
}
ch <- items
}
// show outputs an item.
func (i item) show() {
fmt.Printf("%s\n%s\n\n", i.title, i.link)
}
func main() {
ch := make(chan []item, len(feeds))
for _, feed := range feeds {
go linksFromFeed(feed, ch)
}
for range feeds {
items := <-ch
for _, item := range items {
item.show()
}
}
}