From 6116769757ddd88781129e7339fc7ff60a259337 Mon Sep 17 00:00:00 2001 From: Patryk Niedźwiedziński Date: Fri, 7 Aug 2020 21:55:16 +0200 Subject: Add rss feed generation --- lib/generateRss.ts | 26 ++++++++++++++++++++++++++ lib/index.ts | 17 +++++++++++++---- lib/interfaces.ts | 6 ++++++ 3 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 lib/generateRss.ts (limited to 'lib') diff --git a/lib/generateRss.ts b/lib/generateRss.ts new file mode 100644 index 0000000..2f341c0 --- /dev/null +++ b/lib/generateRss.ts @@ -0,0 +1,26 @@ +import * as fs from "fs" +import RSS from "rss"; + +import { FeedOptions } from "./interfaces"; +import Post from "./Post"; + +export function generateRss(posts: Array, feed_path: string, feedOptions: FeedOptions) { + const feed = new RSS(feedOptions); + const parsedPosts = posts.forEach((post) => { + const { title, content, path, date, author } = post.toApi(); + feed.item({ + title, + description: content, + url: feedOptions.site_url + path, + guid: path, + author, + date, + }) + }) + const xml = feed.xml(); + fs.writeFile(feed_path, xml, (err) => { + if (err) { + console.log(err); + } + }) +} diff --git a/lib/index.ts b/lib/index.ts index 4bf4dd3..3eddf7a 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -1,6 +1,8 @@ +import { FeedOptions } from "./interfaces"; import { getPost as apiGetPost } from "./getPost"; import { getPosts as apiGetPosts } from "./getPosts"; -import { generateApi as apiGenerateApi } from "./generateApi" +import { generateApi as apiGenerateApi } from "./generateApi"; +import { generateRss as apiGenerateRss } from "./generateRss"; import Post from "./Post"; export default class Kronikarz { @@ -13,11 +15,18 @@ export default class Kronikarz { getPosts(): Array { return apiGetPosts(this.postPath); } + getPost(year: string, month: string, day: string, title: string): Post { return apiGetPost({ year, month, day, title }, this.postPath); } - generateApi(path: string) { - const posts = this.getPosts(); - apiGenerateApi(posts, path) + + generateApi(path: string) { + const posts = this.getPosts(); + apiGenerateApi(posts, path) + } + + generateRss(path: string, feedOptions: FeedOptions) { + const posts = this.getPosts(); + apiGenerateRss(posts, path, feedOptions); } } diff --git a/lib/interfaces.ts b/lib/interfaces.ts index 1fbb226..931f712 100644 --- a/lib/interfaces.ts +++ b/lib/interfaces.ts @@ -31,3 +31,9 @@ export interface PostApiListEntry { export interface PostApiEntry extends PostApiListEntry { content: string; } + +export interface FeedOptions { + title: string; + feed_url: string; + site_url: string; +} -- cgit 1.4.1