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