From 5b34b41bd33b0a8602625ae4b9946c95d0839502 Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 22 Mar 2026 19:28:12 +0100 Subject: Add feed tools --- README.md | 16 ++++++++++++++++ parse-feed.py | 25 +++++++++++++++++++++++++ reparse-feed.py | 5 +++++ 3 files changed, 46 insertions(+) create mode 100644 parse-feed.py create mode 100644 reparse-feed.py diff --git a/README.md b/README.md index b2c3c7c..fd2b50c 100644 --- a/README.md +++ b/README.md @@ -59,3 +59,19 @@ Because gemtext is such a simple format, many traditional authoring techniques b For example, adding a header or a footer to many pages can be done by plain text file concatenation. `gemini-to-web` includes an indexer that can generate a reverse-chronological list of articles automatically to simplify maintenance of a blog-like site. + +## Creating aggregators + +This repo contains a few scripts that can help you work with Gemini subscriptions. + +``` +#!/bin/sh + +echo "# Feeds" +echo + +{ + python3 gemget.py gemini://aperalesf.flounder.online/gemlog | python3 parse-feed.py gemini://aperalesf.flounder.online/gemlog "Gemlog de Adrián Perales" + python3 gemget.py gemini://alex.corcoles.net | python3 parse-feed.py gemini://alex.corcoles.net "El blog es mío" +} | sort -r | head -20 | python3 reparse-feed.py +``` diff --git a/parse-feed.py b/parse-feed.py new file mode 100644 index 0000000..8fd66f3 --- /dev/null +++ b/parse-feed.py @@ -0,0 +1,25 @@ +import fileinput +import re +import sys + +import urllib.parse +urllib.parse.uses_relative += ["gemini"] +urllib.parse.uses_netloc += ["gemini"] + + +base_url = sys.argv[1] + +page_title = sys.argv[2] + +for line in sys.stdin.read().splitlines(): + if not line.startswith("=> "): + continue + _, url, text = line.split(maxsplit=2) + + url = urllib.parse.urljoin(base_url, url) + + match = re.match(r"(\d{4}-\d{2}-\d{2})\s+(.*)", text) + if not match: + continue + date, title = match.groups() + print(date, url, f"{page_title} - {title}") diff --git a/reparse-feed.py b/reparse-feed.py new file mode 100644 index 0000000..4d8d5e8 --- /dev/null +++ b/reparse-feed.py @@ -0,0 +1,5 @@ +import sys + +for line in sys.stdin.read().splitlines(): + date, url, title, = line.split(maxsplit=2) + print(f"=> {url} {date} {title}") -- cgit v1.2.3