#!/usr/bin/env python """ Convert /notes/index.atom to RSS 1.0 License: GPL 2; share and enjoy! Author: Sean B. Palmer, inamidst.com Requires: /usr/bin/xsltproc """ import cgitb; cgitb.enable() import sys, os, urllib, tempfile def serve(status, body, mime=None, charset=None, raw=None): # @@ doc, and import the status codes if they'll work mime = mime or 'text/html' charset = charset or 'utf-8' sys.stdout.write("Status: %s\r\n" % status) sys.stdout.write("Content-Type: %s; charset=%s\r\n\r\n" % (mime, charset)) if raw: sys.stdout.write(body) else: body = str(body) if not body.endswith('\n') or body.endswith('\r'): body += '\n' sys.stdout.write(body) sys.exit() def mktemp(text=None, pfx=None, sfx=None): if pfx is None: pfx = 'notes-feed' if sfx is None: sfx = '.tmp' fd, fn = tempfile.mkstemp(prefix=pfx, suffix=sfx) if text: f = os.fdopen(fd, 'w') f.write(text) f.close() return fn def shell(script, scriptname): def command(args): status = os.spawnv(os.P_WAIT, script, [scriptname] + args) if status != 0: msg = "%s %s returned %s status" raise Exception, msg % (script, args, abs(status)) return return command xsltproc = shell('/usr/bin/xsltproc', 'xsltproc') def xslt(xsltfn, xmlfn, outfn): args = ['--novalid', '-o', outfn, xsltfn, xmlfn] xsltproc(args) def getXSLT(xsltfn, xmlfn): outfn = mktemp(pfx='notes-feed', sfx='.rss') xslt(xsltfn, xmlfn, outfn) f = open(outfn, 'r') s = f.read() f.close() os.unlink(outfn) return s def main(): xsltfn = 'atomToRSS.xsl' xmlfn, info = urllib.urlretrieve('http://inamidst.com/notes/index.atom') result = getXSLT(xsltfn, xmlfn) os.unlink(xmlfn) serve(200, result, mime='text/xml') if __name__=="__main__": main()