#!/usr/bin/env python """ Convert /misc/updates 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 os, urllib, tempfile from cgiutil import serve def mktemp(text=None, pfx=None, sfx=None): if pfx is None: pfx = 'updates-rss' 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='updates-rss', sfx='.rss') xslt(xsltfn, xmlfn, outfn) f = open(outfn, 'r') s = f.read() f.close() os.unlink(outfn) return s def main(): xsltfn = 'updates2rss.xsl' xmlfn, info = urllib.urlretrieve('http://inamidst.com/updates') result = getXSLT(xsltfn, xmlfn) os.unlink(xmlfn) serve(200, result, mime='text/xml') if __name__=="__main__": main()