diff options
| author | alex <alex@pdp7.net> | 2023-10-08 16:40:42 +0200 |
|---|---|---|
| committer | alex <alex@pdp7.net> | 2023-10-08 16:40:42 +0200 |
| commit | 6a390b55041c60387b8afc5e5f6a69a5e494939f (patch) | |
| tree | 406a4826643bf180f47aa1d2648c6603471d7f33 /blog_experiment/blog/blog_pages.py | |
| parent | 63b0946233b06735b8403c2f67acc7b706195909 (diff) | |
Add RSS
Diffstat (limited to 'blog_experiment/blog/blog_pages.py')
| -rw-r--r-- | blog_experiment/blog/blog_pages.py | 34 |
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): |
