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 Article, 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') articles = Article.objects.filter(published=True).order_by('-creation_date')[:10] for article in articles: item = dom.createElement('item') self.appendElement(dom, item, 'title', article.title) path = 'http://' + blog.name + article.getPath() self.appendElement(dom, item, 'link', path) self.appendElement(dom, item, 'guid', path) filename = blog.src_path + '/_articles/' + str(article.id) if not os.path.exists(filename): self.addError('File does not exists ' + filename) return f = open(filename, 'rb') article_content = f.read() f.close() self.appendElement(dom, item, 'description', '') author = article.author.email author += ' (' + article.author.first_name + ' ' + article.author.last_name + ')' self.appendElement(dom, item, 'author', author) self.appendElement(dom, item, 'category', article.category.name) creationDate = article.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