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 }