feat: add ePub generator script for blog posts
parent
c437b8adb1
commit
49a9198af9
@ -0,0 +1,57 @@
|
|||||||
|
import { readFile } from 'fs/promises';
|
||||||
|
import Epub from 'epub-gen';
|
||||||
|
import { parseHTML } from 'linkedom';
|
||||||
|
|
||||||
|
interface BlogPost {
|
||||||
|
title: string;
|
||||||
|
author: string;
|
||||||
|
content: string;
|
||||||
|
url: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function generateEpub() {
|
||||||
|
// Read the scraped posts
|
||||||
|
const postsData = await readFile('posts.json', 'utf-8');
|
||||||
|
const posts: BlogPost[] = JSON.parse(postsData);
|
||||||
|
|
||||||
|
if (posts.length === 0) {
|
||||||
|
console.error('No posts found in posts.json');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prepare ePub options
|
||||||
|
const options = {
|
||||||
|
title: 'Crónicas Periodísticas',
|
||||||
|
author: posts[0].author, // Using first post's author as main author
|
||||||
|
output: 'cronicas-periodisticas.epub',
|
||||||
|
content: [],
|
||||||
|
appendChapterTitles: true,
|
||||||
|
verbose: true
|
||||||
|
};
|
||||||
|
|
||||||
|
// Convert each post to ePub chapter format
|
||||||
|
for (const post of posts) {
|
||||||
|
const { document } = parseHTML(post.content);
|
||||||
|
|
||||||
|
// Clean up content - remove unwanted elements if needed
|
||||||
|
const content = document.body.innerHTML;
|
||||||
|
|
||||||
|
options.content.push({
|
||||||
|
title: post.title,
|
||||||
|
author: post.author,
|
||||||
|
data: `
|
||||||
|
<h1>${post.title}</h1>
|
||||||
|
<p><em>Por ${post.author}</em></p>
|
||||||
|
${content}
|
||||||
|
<p><a href="${post.url}">Publicación original</a></p>
|
||||||
|
`
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate the ePub
|
||||||
|
console.log(`Generating ePub with ${posts.length} posts...`);
|
||||||
|
await new Epub(options).promise;
|
||||||
|
console.log('ePub generated successfully!');
|
||||||
|
}
|
||||||
|
|
||||||
|
generateEpub().catch(console.error);
|
Loading…
Reference in New Issue