1
0
Fork 0

Add RSS feed functionality

This commit is contained in:
Tim Van Baak 2023-09-21 09:16:43 -07:00
parent 0c1caf26d2
commit 4bf6252ed1
2 changed files with 41 additions and 1 deletions

View File

@ -14,7 +14,10 @@ watch:
serve: serve:
python -m http.server --directory out/ python -m http.server --directory out/
publish: pubdate:
sed -i "s/pubdate: now/pubdate: $$(date -Isec)/" src/blog/*.md
upload:
./build.py srv/ ./build.py srv/
pagefind --site srv/ pagefind --site srv/
rsync -av srv/* ssh.alogoulogoi.com:/srv/www.alogoulogoi.com rsync -av srv/* ssh.alogoulogoi.com:/srv/www.alogoulogoi.com

View File

@ -1,12 +1,14 @@
#!/usr/bin/env python #!/usr/bin/env python
import argparse import argparse
from datetime import datetime, timezone
import copy import copy
import os import os
import pathlib import pathlib
import shutil import shutil
import bs4 import bs4
from feedgen.feed import FeedGenerator
import markdown import markdown
@ -21,6 +23,10 @@ def main():
md = markdown.Markdown(extensions=["attr_list", "footnotes", "md_in_html", "meta"]) md = markdown.Markdown(extensions=["attr_list", "footnotes", "md_in_html", "meta"])
comment_md = markdown.Markdown() comment_md = markdown.Markdown()
# Map of feed url -> FeedGenerator object
feeds = {}
build_date = datetime.now(timezone.utc)
# Load the template # Load the template
template = bs4.BeautifulSoup( template = bs4.BeautifulSoup(
(src / ".template.html").read_text(encoding="utf8"), (src / ".template.html").read_text(encoding="utf8"),
@ -107,10 +113,41 @@ def main():
aside.extend(html.p.contents) aside.extend(html.p.contents)
page.header.append(aside) page.header.append(aside)
# RSS metadata
if "feed" in meta and "pubdate" in meta:
pubdate = datetime.fromisoformat(meta["pubdate"][0])
link = f"https://www.alogoulogoi.com/{dest.relative_to(out).as_posix()}"
for feed in meta["feed"]:
if feed not in feeds:
feeds[feed] = []
feeds[feed].append({
"title": meta_title[0],
"link": link,
"description": "",
"pubdate": pubdate,
})
# Write the fully templated page # Write the fully templated page
print("Writing ", dest) print("Writing ", dest)
dest.write_text(str(page)) dest.write_text(str(page))
for feed, items in feeds.items():
fg = FeedGenerator()
fg.title(f"alogoulogoi /{feed}/")
fg.link(href=f"https://www.alogoulogoi.com/{feed}/feed.xml")
fg.description("Blog posts from alogoulogoi")
fg.language("en-us")
fg.lastBuildDate(build_date)
for item in sorted(items, key=lambda i: i["pubdate"]):
entry = fg.add_entry()
entry.title(item["title"])
entry.link(href=item["link"])
entry.description(item["description"])
entry.published(item["pubdate"])
rss_path = (out / feed / "feed.xml")
os.makedirs(rss_path.parent, exist_ok=True)
rss_path.write_bytes(fg.rss_str(pretty=True))
print("Processed", count, "files") print("Processed", count, "files")