aboutsummaryrefslogtreecommitdiff
path: root/blog_experiment/blog/blog_pages.py
diff options
context:
space:
mode:
authoralex <alex@pdp7.net>2023-10-08 16:40:42 +0200
committeralex <alex@pdp7.net>2023-10-08 16:40:42 +0200
commit6a390b55041c60387b8afc5e5f6a69a5e494939f (patch)
tree406a4826643bf180f47aa1d2648c6603471d7f33 /blog_experiment/blog/blog_pages.py
parent63b0946233b06735b8403c2f67acc7b706195909 (diff)
Add RSS
Diffstat (limited to 'blog_experiment/blog/blog_pages.py')
-rw-r--r--blog_experiment/blog/blog_pages.py34
1 files changed, 30 insertions, 4 deletions
diff --git a/blog_experiment/blog/blog_pages.py b/blog_experiment/blog/blog_pages.py
index b6776ca5..a82857b1 100644
--- a/blog_experiment/blog/blog_pages.py
+++ b/blog_experiment/blog/blog_pages.py
@@ -3,11 +3,15 @@ import itertools
import pathlib
import textwrap
+import bs4
+
import bicephalus
import htmlgenerator as h
-from blog import html, page, gemtext
+from feedgen import feed
+
+from blog import html, page, gemtext, meta
class Entry:
@@ -113,10 +117,10 @@ class Root(page.BasePage):
posts = "\n".join([f"=> {e.uri} {e.posted} {e.title}" for e in self.entries()])
content = (
textwrap.dedent(
- """\
- # El blog es mío
+ f"""\
+ # {meta.TITLE}
- ## Hay otros como él, pero este es el mío
+ ## {meta.SUBTITLE}
____
"""
@@ -135,6 +139,28 @@ class Root(page.BasePage):
html.html_template(*itertools.chain(posts)),
)
+ def feed(self):
+ fg = feed.FeedGenerator()
+ fg.title(meta.TITLE)
+ fg.subtitle(meta.SUBTITLE)
+ fg.link(href=meta.BASE_URL, rel="self")
+
+ for entry in self.entries()[0:10]:
+ fe = fg.add_entry()
+ url = f"{meta.BASE_URL}{entry.uri}"
+ fe.link(href=url)
+ fe.updated(datetime.datetime.combine(entry.posted, datetime.datetime.min.time(), tzinfo=datetime.timezone.utc))
+ fe.title(entry.title)
+ html = h.render(h.BaseElement(*entry.html()), {})
+ html = bs4.BeautifulSoup(html, features="html.parser").prettify()
+ fe.content(html, type="html")
+
+ return bicephalus.Response(
+ status=bicephalus.Status.OK,
+ content_type="application/rss+xml",
+ content=fg.rss_str(pretty=True),
+ )
+
class EntryPage(page.BasePage):
def __init__(self, request, path):