From ed961b7bdf7088b84c1c67028999822a8eae0913 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Bordalo?= Date: Fri, 23 Jul 2021 16:45:09 +0100 Subject: [PATCH] implements rss feed --- lib/rss.js | 31 +++++++++++++++++++++++++++++++ pages/rss.js | 31 +++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 lib/rss.js create mode 100644 pages/rss.js diff --git a/lib/rss.js b/lib/rss.js new file mode 100644 index 00000000..d117d49f --- /dev/null +++ b/lib/rss.js @@ -0,0 +1,31 @@ +const SITE_URL = 'https://stacker.news' +const SITE_TITLE = 'Stacker News' +const SITE_SUBTITLE = 'Like Hacker News, but with sats' + +const generateRssItem = (item) => { + return ` + + ${SITE_URL}/items/${item.id} + ${item.title} + ${SITE_URL}/items/${item.id} + ${new Date(item.createdAt).toUTCString()} + + ` +} + +export default function generateRssFeed (items) { + const itemsList = items.map(generateRssItem) + return ` + + + ${SITE_TITLE} + ${SITE_URL} + ${SITE_SUBTITLE} + en + ${new Date().toUTCString()} + + ${itemsList.join('')} + + + ` +} diff --git a/pages/rss.js b/pages/rss.js new file mode 100644 index 00000000..9706b350 --- /dev/null +++ b/pages/rss.js @@ -0,0 +1,31 @@ + +import ApolloClient from '../api/client' +import { gql } from '@apollo/client' +import generateRssFeed from '../lib/rss' + +export default function RssFeed () { + return null +} + +export async function getServerSideProps({ req, res }) { + const emptyProps = { props: {} } // to avoid server side warnings + const { error, data } = await (await ApolloClient(req)).query({ + query: gql` + query Items { + items { + createdAt + id + title + } + } + `, + }) + + if (!data.items || error) return emptyProps + + res.setHeader("Content-Type", "text/xml") + res.write(generateRssFeed(data.items)) + res.end() + + return emptyProps +}