yet-another-blog/backend/core/external_api.js

54 lines
1.4 KiB
JavaScript
Raw Normal View History

const feed_lib = require("feed").Feed;
const core = require("./core");
function getBaseFeed() {
return new feed_lib({
title: core.settings.WEBSITE_NAME,
description: `${core.settings.WEBSITE_NAME} RSS Feed`,
id: process.env.BASE_URL,
link: process.env.BASE_URL,
favicon: `${process.env.BASE_URL}/favicon.ico`,
feedLinks: {
json: `${process.env.BASE_URL}/json`,
atom: `${process.env.BASE_URL}/atom`,
},
});
}
async function getFeed({ type = "rss" }) {
// Don't serve RSS feed if disabled by admin
if (!core.settings.CD_RSS) return;
// Get the base feed
let feed = getBaseFeed();
// Get posts
let posts = await core.getBlog({ limit: 20 }); // internal.getBlogList({}, { limit: 20 });
// For each post, add a formatted object to the feed
posts.data.forEach((post) => {
let formatted = {
title: post.title,
description: post.description,
id: post.id,
link: `${process.env.BASE_URL}/blog/${post.id}`,
content: post.content,
date: new Date(post.publish_date),
image: post.thumbnail,
author: [
{
name: post.owner.username,
link: `${process.env.BASE_URL}/author/${post.owner.username}`,
},
],
};
feed.addItem(formatted);
});
// if (type === "rss") return feed.rss2();
if (type === "atom") return feed.atom1();
if (type === "json") return feed.json1();
}
module.exports = { getFeed };