Import gofeed

This commit is contained in:
Joakim Hellsén 2024-02-14 04:27:35 +01:00
commit 1fee75a927
5 changed files with 92 additions and 5 deletions

27
pkg/feeds/feeds.go Normal file
View file

@ -0,0 +1,27 @@
package feeds
import (
"context"
"fmt"
"time"
"github.com/mmcdole/gofeed"
)
func AddFeedToDB(feedURL string) error {
// Cancel the request after 60 seconds if it hasn't finished
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel()
// Parse the feed
fp := gofeed.NewParser()
fp.UserAgent = "FeedVault/1.0 (RSS feed archive; https://feedvault.se; bot@feedvault.se; TheLovinator#9276)"
feed, err := fp.ParseURLWithContext(feedURL, ctx)
if err != nil {
return fmt.Errorf("Error parsing feed: %s", err)
}
fmt.Println(feed.Title)
return nil
}

View file

@ -1,10 +1,10 @@
package handlers
import (
"log"
"net/http"
"strings"
"github.com/TheLovinator1/FeedVault/pkg/feeds"
"github.com/TheLovinator1/FeedVault/pkg/html"
"github.com/TheLovinator1/FeedVault/pkg/models"
"github.com/TheLovinator1/FeedVault/pkg/validate"
@ -27,7 +27,12 @@ func AddFeedHandler(w http.ResponseWriter, r *http.Request) {
var parseErrors []models.ParseResult
// Parse the form and get the URLs
r.ParseForm()
err := r.ParseForm()
if err != nil {
http.Error(w, "Error parsing form", http.StatusInternalServerError)
return
}
urls := r.Form.Get("urls")
if urls == "" {
http.Error(w, "No URLs provided", http.StatusBadRequest)
@ -44,8 +49,13 @@ func AddFeedHandler(w http.ResponseWriter, r *http.Request) {
continue
}
// "Add" the feed to the database
log.Println("Adding feed:", feed_url)
err = feeds.AddFeedToDB(feed_url)
if err != nil {
parseErrors = append(parseErrors, models.ParseResult{FeedURL: feed_url, Msg: err.Error(), IsError: true})
continue
}
// Feed was added successfully
parseErrors = append(parseErrors, models.ParseResult{FeedURL: feed_url, Msg: "Added", IsError: false})
}