Add generate epub function.

This commit is contained in:
Michael Lehmann
2025-10-05 15:58:46 +02:00
parent 52d03aa633
commit ca76bdd564

74
main.py
View File

@@ -1,8 +1,10 @@
import re import re
import secrets
import tempfile import tempfile
from pathlib import Path from pathlib import Path
from requests import HTTPError, request from ebooklib import epub # type: ignore
from requests import HTTPError, auth, request
def parse_issuu_url(url: str) -> tuple[str, str]: def parse_issuu_url(url: str) -> tuple[str, str]:
@@ -66,6 +68,67 @@ def download_pages(page_urls: list[str], working_dir: Path) -> list[Path]:
return page_paths return page_paths
def generate_epub(
pages: list[Path], output_file: Path, title: str, author: str
) -> None:
"""generate epub file."""
book = epub.EpubBook()
book.set_identifier(secrets.token_urlsafe(10))
book.set_title(title=title)
book.set_language("de")
book.add_author(author=author)
chapters = []
for i, page in enumerate(pages, start=1):
page_title = f"Page {i}"
image_item = epub.EpubImage()
image_item.file_name = page.as_posix()
image_item.media_type = "image/png"
book.add_item(image_item)
chapter = epub.EpubHtml(
title=page_title, file_name=f"page_{i}.xhtml", lang="de"
)
chapter.content = f"""
<html>
<head>
<title>{page_title}</title>
<style>
body {{
margin: 0;
padding: 20px;
text-align: center;
}}
img {{
max-width: 100%;
height: auto;
max-height: 90vh;
}}
</style>
</head>
<body>
<img src="{image_item.file_name}" alt="Page {i}"/>
</body>
</html>
"""
book.add_item(chapter)
chapters.append(chapter)
book.toc = chapters
book.spine = ["nav"] + chapters
book.add_item(epub.EpubNcx())
book.add_item(epub.EpubNav())
epub.write_epub(output_file, book, {})
print(f"EPUB erfolgreich erstellt: {output_file}")
def main() -> None: def main() -> None:
"""main function.""" """main function."""
cwd = create_working_dir() cwd = create_working_dir()
@@ -75,7 +138,14 @@ def main() -> None:
urls = get_page_urls(username, document_id) urls = get_page_urls(username, document_id)
print(download_pages(urls, cwd)) pages = download_pages(urls, cwd)
generate_epub(
pages=pages,
output_file=Path("/home/michael/Downloads/YBMag-2025-01.epub"),
title="YB Mag 2025 01",
author="BSC YB",
)
if __name__ == "__main__": if __name__ == "__main__":