import os import datetime import xml from dynastie.generators.generator import DynastieGenerator from xml.dom.minidom import getDOMImplementation from django.db import models class RSS(DynastieGenerator): def appendElement(self, dom, root, name='', content='', attributes=None): elem = dom.createElement(name) if not attributes is None: for k, v in attributes.iteritems(): 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() f.close() 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