From 6a390b55041c60387b8afc5e5f6a69a5e494939f Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 8 Oct 2023 16:40:42 +0200 Subject: Add RSS --- blog_experiment/blog/blog_pages.py | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) (limited to 'blog_experiment/blog/blog_pages.py') 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): -- cgit v1.2.3