From 0121fee80b18094c64af31fcef5a05bd725a8546 Mon Sep 17 00:00:00 2001 From: tilda Date: Fri, 10 Apr 2026 22:50:28 +0000 Subject: [PATCH 1/5] initial `retrieveFromRss` iteration & components --- _api/retrieveFromRss.js | 48 +++++++++++++++++++++++++++++++++++++ src/components/BlogCard.vue | 15 ++++++++++++ src/views/BlogView.vue | 2 ++ 3 files changed, 65 insertions(+) create mode 100644 _api/retrieveFromRss.js create mode 100644 src/components/BlogCard.vue diff --git a/_api/retrieveFromRss.js b/_api/retrieveFromRss.js new file mode 100644 index 0000000..4ddf53a --- /dev/null +++ b/_api/retrieveFromRss.js @@ -0,0 +1,48 @@ +import { parseAtomFeed } from 'feedsmith' + +export const config = { + path: "/retrieveFromRss/:page?" +} + +export default async (_req, ctx) => { + try { + let { pageParam } = ctx.params + if (pageParam === null) { + pageParam = 1 + } else { + pageParam = Number.parseInt(pageParam, 10).toFixed(0) + } + const MAX_PAGE_SIZE = 6 + + const result = fetch('https://tilda.bearblog.dev/feed', { + headers: { + 'User-Agent': 'flourite (github.com/tilda/web, mailto:me@til.pm)', + 'Accept': 'application/atom+xml' + } + }).catch((err) => { + throw new Error(`Caught error while requesting Bear RSS feed: ${err}`) + }).then((res) => { + return parseAtomFeed(res.text) + }) + + const PAGE_LIMIT = (result.feed.items.length / MAX_PAGE_SIZE + 1).toFixed(0) + + if (pageParam > PAGE_LIMIT) { + throw new Error(`Requested page ${pageParam} does not currently exist`) + } + + return new Response(JSON.stringify({ + 'status': 'ok', + 'current_page': pageParam, + 'max_pages': PAGE_LIMIT, + 'items': result.feed.items.slice((pageParam - 1) * MAX_PAGE_SIZE, pageParam * MAX_PAGE_SIZE) + })) + } catch (err) { + return new Response(JSON.stringify({ + 'status': 'err', + 'error': err + }), { + status: 400 + }) + } +} \ No newline at end of file diff --git a/src/components/BlogCard.vue b/src/components/BlogCard.vue new file mode 100644 index 0000000..5f3de96 --- /dev/null +++ b/src/components/BlogCard.vue @@ -0,0 +1,15 @@ + + + \ No newline at end of file diff --git a/src/views/BlogView.vue b/src/views/BlogView.vue index e9d1054..e5452bc 100644 --- a/src/views/BlogView.vue +++ b/src/views/BlogView.vue @@ -1,5 +1,7 @@