/misc/updates-rss.cgi
#!/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()