#!/usr/bin/env node
// Script to generate RSS feed from blog-posts.json
const fs = require('fs');
const path = require('path');
const postsPath = path.join(__dirname, 'blog-posts.json');
const feedPath = path.join(__dirname, 'feed.xml');
try {
const posts = JSON.parse(fs.readFileSync(postsPath, 'utf8'));
// Sort posts by date (newest first)
const sortedPosts = posts.sort((a, b) => new Date(b.date) - new Date(a.date));
// Escape XML special characters
const escapeXml = (str) => {
if (!str) return '';
return str.toString()
.replace(/&/g, '&')
.replace(//g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
};
// Convert content newlines to HTML breaks
const formatContent = (content) => {
return content.split('\n\n')
.map(p => p.trim())
.filter(p => p.length > 0)
.join('
');
};
// Generate RSS items
const rssItems = sortedPosts.map(post => {
const title = escapeXml(post.title);
const excerpt = escapeXml(post.excerpt);
const content = formatContent(post.content);
const pubDate = new Date(post.date + 'T00:00:00Z').toUTCString();
const link = `https://example.com/blog/post.html?id=${post.id}`;
return ` -
${title}
${link}
${link}
${pubDate}
${content}]]>
`;
}).join('\n');
// Generate RSS XML
const rssXml = `
My Blog
https://example.com/blog
Blog posts
en-us
${new Date().toUTCString()}
${rssItems}
`;
// Write RSS feed file
fs.writeFileSync(feedPath, rssXml, 'utf8');
console.log('RSS feed generated successfully at', feedPath);
} catch (error) {
console.error('Error generating RSS feed:', error);
process.exit(1);
}