Below is the file 'ljrss.py' from this revision. You can also download the file.

#!/usr/bin/python

import StringIO
import httplib
import urllib
import gzip

#
# RSS client for livejournal that does gzip encoding.
#

def get_livejournal_rss(site, username, user_agent, uri=None, no_recurse=False):
	conn = httplib.HTTPConnection(site)
	headers = {'Accept-encoding':'gzip','User-agent':user_agent}
	if uri == None:
		uri = "http://%s/users/%s/data/rss" % (site, urllib.quote(username))
	conn.request("GET", uri, headers=headers)
	r = conn.getresponse()
	if r.status == 302:
		# prevent evil
		if no_recurse: return None
		# probably a community
		new_location = r.getheader('Location', None)
		if not new_location.startswith('http://' + site + '/'):
			return None
		conn.close()
		return get_livejournal_rss(site, username, user_agent, uri=new_location, no_recurse=True)
	elif r.status <> 200:
		conn.close()
		return None
	data = r.read()
	if r.getheader('content-encoding', None) == 'gzip':
		data = gzip.GzipFile(fileobj=StringIO.StringIO(data)).read()
	return data

if __name__ == '__main__':
	print get_livejournal_rss('www.livejournal.com', 'unisfa', 'http://grahame.angrygoats.net/lj-haiku; grahame@angrygoats.net')