Add RSS feed functionality
This commit is contained in:
parent
0c1caf26d2
commit
4bf6252ed1
5
Makefile
5
Makefile
|
@ -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
|
37
build.py
37
build.py
|
@ -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")
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue