From cc5d4e07146da033ded55c216b41378bca9a10b4 Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 15 Feb 2026 10:42:00 +0100 Subject: Add RSS generation Remove old deprecated CLI converter in __init__ --- gemini-to-web/src/gemini_to_web/rss.py | 63 ++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 gemini-to-web/src/gemini_to_web/rss.py (limited to 'gemini-to-web/src/gemini_to_web/rss.py') diff --git a/gemini-to-web/src/gemini_to_web/rss.py b/gemini-to-web/src/gemini_to_web/rss.py new file mode 100644 index 0000000..a03a4aa --- /dev/null +++ b/gemini-to-web/src/gemini_to_web/rss.py @@ -0,0 +1,63 @@ +import argparse +import datetime +import pathlib +import sys + +from feedgen import feed +import htmlgenerator + +import gemini_to_web +from gemini_to_web import html +from gemini_to_web import parser + + +def cli_to_rss(): + argument_parser = argparse.ArgumentParser() + argument_parser.add_argument("--title", default="") + argument_parser.add_argument("--subtitle", default=None) + argument_parser.add_argument("--base-url", default="") + argument_parser.add_argument("base_dir", type=pathlib.Path) + args = argument_parser.parse_args() + + fg = feed.FeedGenerator() + fg.title(args.title) + fg.subtitle(args.subtitle) + fg.link(href=args.base_url, rel="self") + + input_ = sys.stdin.read() + parsed = parser.parse(input_) + parsed = list(parsed) + + entries = [] + for element in parsed: + match element: + case parser.LinkLine(url, link_name): + match = gemini_to_web.ENTRY_ELEMENT_TITLE.match(link_name) + if match: + entries.append((match.group(1), url, match.group(2))) + case _: + pass + + entries = sorted(entries, reverse=True) + entries = entries[0:10] + + for (date, url, title) in entries: + feed_entry = fg.add_entry() + feed_entry.link(href=args.base_url + "/" + url) + feed_entry.published( + datetime.datetime.combine( + datetime.date.fromisoformat(date), + datetime.datetime.min.time(), + tzinfo=datetime.UTC, + ) + ) + feed_entry.title(title) + parsed = parser.parse((args.base_dir / pathlib.Path(url).with_suffix(".gmi")).read_text()) + parsed = list(parsed) + parsed = parsed[1:] + content = html.to_html(parsed) + rendered = htmlgenerator.render(content[1], {}) + rendered = html.pretty(rendered) + feed_entry.content(rendered.encode("utf8"), type="html") + + print(fg.rss_str(pretty=True).decode("utf8"), end="") -- cgit v1.2.3