From d83895c941028fb07d735508bff5d9bcc6ec65c8 Mon Sep 17 00:00:00 2001 From: Dennis Date: Tue, 3 Sep 2024 20:29:28 +0200 Subject: [PATCH] Implements basic retrieval and storage of RSS feeds --- internal/feed.go | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/internal/feed.go b/internal/feed.go index 9e77758..ba938be 100644 --- a/internal/feed.go +++ b/internal/feed.go @@ -1,14 +1,27 @@ package feed import ( + "fmt" "freed/internal/database" + "net/url" + + "github.com/mmcdole/gofeed" ) -func Add(url string) error { +func Add(feedUrl string) error { + if _, err := url.ParseRequestURI(feedUrl); err != nil { + return fmt.Errorf("The given URL does not seem to be valid: %s", err) + } + + feed, err := parseByUrl(feedUrl) + + if err != nil { + return err + } + f := database.Feed{ - Name: url, - Url: url, - FeedType: database.FeedType("RSS"), + Name: feed.Title, + Url: feedUrl, } if _, err := f.Insert(); err != nil { @@ -17,3 +30,14 @@ func Add(url string) error { return nil } + +func parseByUrl(u string) (*gofeed.Feed, error) { + fp := gofeed.NewParser() + feed, err := fp.ParseURL(u) + + if err != nil { + return nil, err + } + + return feed, nil +}