aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralex <alex@pdp7.net>2026-02-15 19:42:47 +0100
committeralex <alex@pdp7.net>2026-02-15 19:42:47 +0100
commit6b57ca7b17c003cffa37d00838b6f95b608d0c85 (patch)
treeda3a99c34be6dc174f8a5a12a8e143ed4f6cc275
parentbe90f271f07b1234cef85a234211b3d3344cc2af (diff)
Extract RSS title and subtitle from headers
(Like gemfeed does.) Also make base-url parameter mandatory.
-rwxr-xr-xgemini-to-web/example/build.sh4
-rw-r--r--gemini-to-web/src/gemini_to_web/rss.py22
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 <<HEAD
# Welcome to my blog
+## Subtitle
+
HEAD
find . -path './source/2???/??/*.gmi' -type f -print0 | uv --project .. run coppewebite-indexer source/
} >target/index.gmi
# Generate an RSS feed.
-uv --project .. run coppewebite-to-rss <target/index.gmi >target/index.rss --title Example --subtitle Subtitle --base-url https://www.example.com target/
+uv --project .. run coppewebite-to-rss <target/index.gmi >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: