rss.go

 1// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
 2//
 3// SPDX-License-Identifier: Apache-2.0
 4
 5package rss
 6
 7import (
 8	"fmt"
 9	"time"
10
11	"github.com/microcosm-cc/bluemonday"
12
13	"github.com/mmcdole/gofeed"
14)
15
16type Release struct {
17	Tag     string
18	Content string
19	URL     string
20	Date    time.Time
21}
22
23var (
24	bmUGC    = bluemonday.UGCPolicy()
25	bmStrict = bluemonday.StrictPolicy()
26)
27
28func GetReleases(feedURL string) ([]Release, error) {
29	fp := gofeed.NewParser()
30	feed, err := fp.ParseURL(feedURL + "/releases.atom")
31	if err != nil {
32		fmt.Println(err)
33		return nil, err
34	}
35
36	releases := make([]Release, 0)
37
38	for _, item := range feed.Items {
39		releases = append(releases, Release{
40			Tag:     bmStrict.Sanitize(item.Title),
41			Content: bmUGC.Sanitize(item.Content),
42			URL:     bmStrict.Sanitize(item.Link),
43			Date:    *item.PublishedParsed,
44		})
45	}
46
47	// TODO: Doesn't seem to work?
48	// sort.Slice(p.Releases, func(i, j int) bool { return p.Releases[i].Date.After(p.Releases[j].Date) })
49
50	return releases, nil
51}