#!/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); }