From 6b57ca7b17c003cffa37d00838b6f95b608d0c85 Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 15 Feb 2026 19:42:47 +0100 Subject: Extract RSS title and subtitle from headers (Like gemfeed does.) Also make base-url parameter mandatory. --- gemini-to-web/example/build.sh | 4 +++- gemini-to-web/src/gemini_to_web/rss.py | 22 +++++++++++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/gemini-to-web/example/build.sh b/gemini-to-web/example/build.sh index 95d7641..65de0e2 100755 --- a/gemini-to-web/example/build.sh +++ b/gemini-to-web/example/build.sh @@ -19,12 +19,14 @@ cp -r source/* target/ cat <target/index.gmi # Generate an RSS feed. -uv --project .. run coppewebite-to-rss target/index.rss --title Example --subtitle Subtitle --base-url https://www.example.com target/ +uv --project .. run coppewebite-to-rss target/index.rss https://www.example.com target/ # Convert all gemtext to HTML. find target -name '*.gmi' -exec sh -c 'uv --project .. run coppewebite-to-html <{} >$(echo {} | sed s/.gmi/.html/)' ';' diff --git a/gemini-to-web/src/gemini_to_web/rss.py b/gemini-to-web/src/gemini_to_web/rss.py index a03a4aa..40bb025 100644 --- a/gemini-to-web/src/gemini_to_web/rss.py +++ b/gemini-to-web/src/gemini_to_web/rss.py @@ -13,21 +13,29 @@ from gemini_to_web import parser def cli_to_rss(): argument_parser = argparse.ArgumentParser() - argument_parser.add_argument("--title", default="") + argument_parser.add_argument("--title", default=None) argument_parser.add_argument("--subtitle", default=None) - argument_parser.add_argument("--base-url", default="") + argument_parser.add_argument("base_url") 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) + title = args.title + if not title: + title = [p for p in parsed if isinstance(p, parser.HeadingLine) and p.level == 1][0].heading_text + + subtitle = args.subtitle + if not subtitle: + subtitle = [p for p in parsed if isinstance(p, parser.HeadingLine) and p.level == 2][0].heading_text + + fg = feed.FeedGenerator() + fg.title(title) + fg.subtitle(subtitle) + fg.link(href=args.base_url, rel="self") + entries = [] for element in parsed: match element: -- cgit v1.2.3