# -*- coding: utf-8 -*- """ Copyright 2012-2014 Grégory Soutadé This file is part of Dynastie. Dynastie is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Dynastie is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Dynastie. If not, see . """ import os import datetime import xml from dynastie.generators.generator import DynastieGenerator from xml.dom.minidom import getDOMImplementation from django.db import models from dynastie.generators import markdown2 class RSS(DynastieGenerator): def appendElement(self, dom, root, name='', content='', attributes=None): elem = dom.createElement(name) if attributes: for k, v in attributes.items(): elem.setAttribute(k, v) if content != '': elem.appendChild(dom.createTextNode(content)) root.appendChild(elem) return elem def generate(self, blog, src, output): from dynastie.models import Post, Blog now = datetime.datetime.now() impl = getDOMImplementation() dom = impl.createDocument(None, "rss", None) root = dom.documentElement root.setAttribute('version', '2.0') root.setAttributeNS('xmlns', 'xmlns:atom', 'http://www.w3.org/2005/Atom') channel = dom.createElement('channel') root.appendChild(channel) self.appendElement(dom, channel, 'title', blog.title) self.appendElement(dom, channel, 'description', blog.description) self.appendElement(dom, channel, 'link', 'http://' + blog.name) builddate = now.strftime('%a, %d %b %Y %H:%M:%S') self.appendElement(dom, channel, 'lastBuildDate', builddate) self.appendElement(dom, channel, 'generator', 'Dynastie') self.appendElement(dom, channel, 'language', 'en-gb') posts = Post.objects.filter(published=True).order_by('-modification_date')[:10] for post in posts: item = dom.createElement('item') self.appendElement(dom, item, 'title', post.title) path = 'http://' + blog.name + post.getPath() self.appendElement(dom, item, 'link', path) self.appendElement(dom, item, 'guid', path) filename = blog.src_path + '/_post/' + str(post.id) if not os.path.exists(filename): self.addError('File does not exists ' + filename) return f = open(filename, 'rb') post_content = f.read().decode('utf-8') f.close() if post.content_format == Post.CONTENT_TEXT: post_content = markdown2.markdown(post_content) self.appendElement(dom, item, 'description', '') try: author = post.author.email author += ' (' + post.author.first_name + ' ' + post.author.last_name + ')' self.appendElement(dom, item, 'author', author) self.appendElement(dom, item, 'category', post.category.name) except: pass creationDate = post.creation_date.strftime('%a, %d %b %Y %H:%M:%S') self.appendElement(dom, item, 'pubDate', creationDate) channel.appendChild(item) filename = 'rss.xml' self.writeIfNotTheSame(output + '/' + filename, root) if not self.somethingWrote: self.addReport('Nothing changed') return self.report