--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<rss version="2.0">
+ <channel>
+ <title>IPFire.org - News</title>
+ <link>http://www.ipfire.org/</link>
+ <description>IPFire News Feed</description>
+ <language>{{ lang }}</language>
+ <copyright>IPFire-Team</copyright>
+ <pubDate>Thu, 8 Nov 2007 00:00:00 +0200</pubDate>
+ {% for item in items %}
+ <item>
+ <title>{{ item.subject }}</title>
+ <link>http://www.ipfire.org/{{ lang }}/news</link>
+ <author>{{ item.mail }} ({{ item.author }})</author>
+ <guid>http://www.ipfire.org/{{ lang }}/news#{{ item.id }}</guid>
+ <pubDate>{{ item.date }}</pubDate>
+ <description>
+ <![CDATA[
+ {{ item.content }}
+ ]]>
+ </description>
+ </item>
+ {% end %}
+ </channel>
+</rss>
(r"/[A-Za-z]{2}/downloads?/development", DownloadDevelopmentHandler),
(r"/[A-Za-z]{2}/downloads?/mirrors", DownloadMirrorHandler),
(r"/[A-Za-z]{2}/downloads?/torrents", DownloadTorrentHandler),
+ # RSS feed
+ (r"/([A-Za-z]{2})/news.rss", RSSHandler),
+ (r"/data/feeds/main-([A-Za-z]{2}).rss", RSSHandler),
# API
(r"/api/cluster_info", ApiClusterInfoHandler),
# Always the last rule
import tornado.web
from banners import banners
-from helpers import size
+from helpers import size, Item
from info import info
from mirrors import mirrors
from news import news
def get_error_html(self, status_code, **kwargs):
return tornado.web.RequestHandler.get_error_html(self, status_code, **kwargs)
+
+
+class RSSHandler(BaseHandler):
+ def get(self, lang):
+ items = []
+ for item in news.get(15):
+ item = Item(**item.args.copy())
+ for attr in ("subject", "content"):
+ if type(item[attr]) == type({}):
+ item[attr] = item[attr][lang]
+ items.append(item)
+
+ self.set_header("Content-Type", "application/rss+xml")
+ self.render("rss.xml", items=items, lang=lang)
json = json_loads(data)
for key in sorted(json.keys()):
+ json[key]["id"] = key
self.items.append(NewsItem(**_stringify(json[key])))
def get(self, limit=None):