aboutsummaryrefslogtreecommitdiffhomepage
path: root/backend/api
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-14 12:20:31 +0900
committernsfisis <nsfisis@gmail.com>2026-02-14 12:20:31 +0900
commit042fcb5c4eac16f18fc051f55a6c63ca9e97306b (patch)
tree1a61d1f7690e933a8d1e452e744ac02db14af042 /backend/api
parentfffd36268a216044523c3f5227c3d375608c36dc (diff)
downloadfeedaka-042fcb5c4eac16f18fc051f55a6c63ca9e97306b.tar.gz
feedaka-042fcb5c4eac16f18fc051f55a6c63ca9e97306b.tar.zst
feedaka-042fcb5c4eac16f18fc051f55a6c63ca9e97306b.zip
feat(feed): auto-discover feed URLs from HTML pages
When an HTML page is provided instead of a direct feed URL, parse <link rel="alternate"> tags to find RSS/Atom feeds. Atom is preferred over RSS when both are present. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'backend/api')
-rw-r--r--backend/api/handler_feeds.go8
1 files changed, 4 insertions, 4 deletions
diff --git a/backend/api/handler_feeds.go b/backend/api/handler_feeds.go
index f0a8785..4d16e4b 100644
--- a/backend/api/handler_feeds.go
+++ b/backend/api/handler_feeds.go
@@ -46,14 +46,14 @@ func (h *Handler) FeedsAddFeed(ctx context.Context, request FeedsAddFeedRequestO
return nil, fmt.Errorf("authentication required")
}
- f, err := feed.Fetch(ctx, request.Body.Url)
+ result, err := feed.Fetch(ctx, request.Body.Url)
if err != nil {
return FeedsAddFeed400JSONResponse{Message: fmt.Sprintf("failed to parse feed: %v", err)}, nil
}
dbFeed, err := h.Queries.CreateFeed(ctx, db.CreateFeedParams{
- Url: request.Body.Url,
- Title: f.Title,
+ Url: result.URL,
+ Title: result.Feed.Title,
FetchedAt: time.Now().UTC().Format(time.RFC3339),
UserID: userID,
})
@@ -61,7 +61,7 @@ func (h *Handler) FeedsAddFeed(ctx context.Context, request FeedsAddFeedRequestO
return FeedsAddFeed400JSONResponse{Message: fmt.Sprintf("failed to insert feed: %v", err)}, nil
}
- if err := feed.Sync(ctx, h.Queries, dbFeed.ID, f); err != nil {
+ if err := feed.Sync(ctx, h.Queries, dbFeed.ID, result.Feed); err != nil {
return FeedsAddFeed400JSONResponse{Message: fmt.Sprintf("failed to sync articles: %v", err)}, nil
}