From: Michael Tremer Date: Tue, 17 Jul 2018 17:24:47 +0000 (+0100) Subject: blog: Add RSS feed to the blog X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f0714277e537623e2f3c3d9603b2a81b4fa6d3e1;p=ipfire.org.git blog: Add RSS feed to the blog Signed-off-by: Michael Tremer --- diff --git a/Makefile.am b/Makefile.am index 6e806e7a..8761a283 100644 --- a/Makefile.am +++ b/Makefile.am @@ -110,6 +110,7 @@ templatesdir = $(datadir)/templates templates_blog_DATA = \ src/templates/blog/author.html \ src/templates/blog/base.html \ + src/templates/blog/feed.xml \ src/templates/blog/index.html \ src/templates/blog/post.html \ src/templates/blog/search-results.html diff --git a/src/templates/blog/feed.xml b/src/templates/blog/feed.xml new file mode 100644 index 00000000..f159bc2a --- /dev/null +++ b/src/templates/blog/feed.xml @@ -0,0 +1,37 @@ + + + + IPFire Blog + + https://blog.ipfire.org + The official blog of the IPFire Project + {{ now }} + en-GB + hourly + 1 + + + https://www.ipfire.org{{ static_url("img/tux/ipfire_tux_32x32.png") }} + IPFire Blog + https://blog.ipfire.org + 32 + 32 + + + + + {% for post in posts %} + + {{ post.title }} + https://blog.ipfire.org/post/{{ post.slug }} + {{ post.author.email }} ({{ post.author.name }}) + {{ post.published.strftime("%a, %d %b %Y %H:%M:%S +0200") }} + + + + {% end %} + + diff --git a/src/templates/feeds/base.xml b/src/templates/feeds/base.xml deleted file mode 100644 index ee74fa01..00000000 --- a/src/templates/feeds/base.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - {% block title %}{% end block %} - {% block url %}{% end block %} - {% block description %}{% end block %} - en_GB - {% block copyright %}IPFire Team{% end block %} - Thu, 8 Nov 2007 00:00:00 +0200 - {% for item in items %} - - {{ item.title }} - {{ item.url }} - {{ item.author.email }} ({{ item.author.name }}) - {{ item.url }} - {{ item.published.strftime("%a, %d %b %Y %H:%M:%S +0200") }} - - - - - {% end %} - - diff --git a/src/templates/feeds/news.xml b/src/templates/feeds/news.xml deleted file mode 100644 index 1b3a860a..00000000 --- a/src/templates/feeds/news.xml +++ /dev/null @@ -1,5 +0,0 @@ -{% extends "base.xml" %} - -{% block title %}IPFire.org - News{% end block%} -{% block url %}http://www.ipfire.org/{% end block %} -{% block description %}IPFire News Feed{% end block %} diff --git a/src/templates/feeds/planet.xml b/src/templates/feeds/planet.xml deleted file mode 100644 index e42aea9c..00000000 --- a/src/templates/feeds/planet.xml +++ /dev/null @@ -1,5 +0,0 @@ -{% extends "base.xml" %} - -{% block title %}planet.ipfire.org{% end block%} -{% block url %}http://planet.ipfire.org/{% end block %} -{% block description %}IPFire Planet Feed{% end block %} diff --git a/src/web/__init__.py b/src/web/__init__.py index bf42bdf2..12fc7320 100644 --- a/src/web/__init__.py +++ b/src/web/__init__.py @@ -94,7 +94,7 @@ class Application(tornado.web.Application): (r"/donation", tornado.web.RedirectHandler, { "url" : "/donate" }), # RSS feed - (r"/news.rss", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/feed.rss" }), + (r"/news.rss", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/feed.xml" }), # Redirect news articles to blog (r"/news/(.*)", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/posts/{1}" }), @@ -120,6 +120,9 @@ class Application(tornado.web.Application): (r"/authors/(\w+)", blog.AuthorHandler), (r"/post/(.*)", blog.PostHandler), (r"/search", blog.SearchHandler), + + # RSS Feed + (r"/feed.xml", blog.FeedHandler), ]) # downloads.ipfire.org @@ -150,9 +153,9 @@ class Application(tornado.web.Application): (r"/user/([a-z0-9_-]+)", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/authors/{1}" }), # RSS - (r"/rss", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/feed.rss" }), + (r"/rss", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/feed.xml" }), (r"/user/([a-z0-9_-]+)/rss", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/authors/{1}.rss" }), - (r"/news.rss", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/feed.rss" }), + (r"/news.rss", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/feed.xml" }), ]) # fireinfo.ipfire.org diff --git a/src/web/blog.py b/src/web/blog.py index 2ff59b5e..635c224d 100644 --- a/src/web/blog.py +++ b/src/web/blog.py @@ -1,5 +1,6 @@ #!/usr/bin/python +import email.utils import tornado.web import handlers_base as base @@ -27,6 +28,29 @@ class AuthorHandler(base.BaseHandler): self.render("blog/author.html", author=author, posts=posts) +class FeedHandler(base.BaseHandler): + def get(self): + cache_key = "%s-%s" % (self.request.host, self.request.path) + + # Get feed from cache if possible + feed = self.memcached.get(cache_key) + if not feed: + posts = self.planet.get_entries(limit=50) + + # Render the feed + feed = self.render_string("blog/feed.xml", posts=posts, + now=email.utils.formatdate()) + + # Store in cache for 5min + self.memcached.set(cache_key, feed, 300) + + # Set correct content type + self.set_header("Content-Type", "application/rss+xml") + + # Deliver content + self.finish(feed) + + class PostHandler(base.BaseHandler): def get(self, slug): entry = self.planet.get_entry_by_slug(slug)