From 65a4cb6ce9387c52c4274fddde9320baadbf017f Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Wed, 12 Jan 2022 02:02:54 +0100 Subject: chore: generate feed I could loop until hasNextPage is false, but I'm not sure if it is the best solution. So, for now, only the first 100 posts will be added to the file. --- src/utils/helpers/rss.ts | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/utils/helpers/rss.ts (limited to 'src') diff --git a/src/utils/helpers/rss.ts b/src/utils/helpers/rss.ts new file mode 100644 index 0000000..42560cb --- /dev/null +++ b/src/utils/helpers/rss.ts @@ -0,0 +1,54 @@ +import { config } from '@config/website'; +import { getPublishedPosts } from '@services/graphql/queries'; +import { ArticlePreview } from '@ts/types/articles'; +import { Feed } from 'feed'; +import { writeFileSync } from 'fs'; + +const getAllPosts = async (): Promise => { + const posts: ArticlePreview[] = []; + const postsList = await getPublishedPosts({ first: 100 }); + posts.push(...postsList.posts); + + return posts; +}; + +export const generateFeed = async () => { + const websiteUrl = process.env.FRONTEND_URL ? process.env.FRONTEND_URL : ''; + const author = { + name: config.name, + email: process.env.AUTHOR_EMAIL, + link: websiteUrl, + }; + const copyright = `${config.name} CC BY SA ${config.copyright.startYear} - ${config.copyright.endYear}`; + const title = `${config.name} | ${config.baseline}`; + + const feed = new Feed({ + author, + copyright, + description: process.env.FEED_DESCRIPTION, + feedLinks: { + json: `${websiteUrl}/feed/json`, + atom: `${websiteUrl}/feed/atom`, + }, + generator: 'Feed & NextJS', + id: websiteUrl, + language: config.defaultLocale, + link: websiteUrl, + title, + }); + + const posts = await getAllPosts(); + + posts.forEach((post) => { + feed.addItem({ + content: post.intro, + date: new Date(post.dates.publication), + description: post.intro, + id: post.id, + link: `${websiteUrl}/article/${post.slug}`, + title: post.title, + }); + }); + + writeFileSync('./public/feed.xml', feed.rss2(), 'utf8'); +}; -- cgit v1.2.3