From 00dae2c3367097905543063e3d28a095698aa09e Mon Sep 17 00:00:00 2001 From: ktyl Date: Sat, 11 Mar 2023 12:16:38 +0000 Subject: [PATCH] make rss --- build/rss.py | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++ makefile | 7 ++++- 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 build/rss.py diff --git a/build/rss.py b/build/rss.py new file mode 100644 index 0000000..4922fe5 --- /dev/null +++ b/build/rss.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 + +import markdown +import pathlib +import sys +import re + +def print_usage(): + print("\nusage: python mkblogrss.py POSTS\n") + print("\n") + print("\t\tPOSTS\tfilepaths of blog posts") + +# check args for at least one file path +if len(sys.argv) < 2: + print_usage() + sys.exit(1) + +# posts are arguments from index 1 onwards +posts = sys.argv[1:] + +# header and footer to enclose feed items +header = """ + + + ktyl.dev + https://ktyl.dev/blog/index.html + mostly computer stuff! + + """ +footer = "" + +# regex patterns +title_pattern = re.compile("

(.+)

") +path_pattern = re.compile("(.+)\/(\d{4})\/(\d{1,2})\/(\d{1,2})\/(.+).md") + +def make_item(path): + str = "\n" + + # get the HTML version of the file + text = "" + with open(path) as f: + text = f.read() + html = markdown.markdown(text, extensions=["fenced_code"]) + + # title + title = "" + m = title_pattern.match(html) + title = m.group(1) + str += f"{title}\n" + + # link + url = "/".join(pathlib.Path(path).parts[2:]) + url = url.replace(".md", ".html") + link = f"https://ktyl.dev/blog/{url}" + str += f"{link}\n" + + # content + description = html + description = re.sub('<', '<', description) + description = re.sub('>', '>', description) + str += f"{description}\n" + + # pub date + date = re.sub(path_pattern, r'\2-\3-\4', path) + str += f"{date}\n" + + str += "" + + return str + +# print everything! +print(header) +for p in posts: + print(make_item(p)) +print(footer) + diff --git a/makefile b/makefile index 72489e2..9abe944 100644 --- a/makefile +++ b/makefile @@ -5,10 +5,12 @@ GEMINI_DIR = $(OUT_DIR)gemini MAKE_GEMINI = build/markdown2gemini.py MAKE_HTML = build/markdown2html.py +MAKE_RSS = build/rss.py PAGES = $(shell find $(SRC_DIR) -wholename "$(BLOG_SRC_DIR)*.md") HTML_TARGETS = $(PAGES:$(SRC_DIR)/%.md=$(HTML_DIR)/%.html) +HTML_RSS = $(HTML_DIR)/index.xml GEMINI_TARGETS = $(PAGES:$(SRC_DIR)/%.md=$(GEMINI_DIR)/%.gmi) _dummy := $(shell mkdir -p $(HTML_DIR) $(GEMINI_DIR)) @@ -16,7 +18,10 @@ _dummy := $(shell mkdir -p $(HTML_DIR) $(GEMINI_DIR)) $(HTML_DIR)/%.html: $(SRC_DIR)/%.md python $(MAKE_HTML) $< $@ -html: $(HTML_TARGETS) +$(HTML_RSS): $(PAGES) + pipenv run python $(MAKE_RSS) $(PAGES) > $@ + +html: $(HTML_TARGETS) $(HTML_RSS) echo $(HTML_TARGETS) gemini: