1
# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
2
# See LICENSE for details.
5
# Syndicate LiveJournal users
6
# Demonstrates how to use chained callbacks
7
from __future__ import nested_scopes
9
from twisted.web import resource as resourcelib
10
from twisted.web import client, microdom, domhelpers, server
12
urlTemplate = 'http://www.livejournal.com/users/%s/rss'
14
class LJSyndicatingResource(resourcelib.Resource):
16
def render_GET(self, request):
17
url = urlTemplate % request.args['user'][0]
18
client.getPage(url).addCallback(
19
microdom.parseString).addCallback(
20
lambda t: domhelpers.findNodesNamed(t, 'item')).addCallback(
21
lambda itms: zip([domhelpers.findNodesNamed(x, 'title')[0]
23
[domhelpers.findNodesNamed(x, 'link')[0]
26
lambda itms: '<html><head></head><body><ul>%s</ul></body></html>' %
28
['<li><a href="%s">%s</a></li>' % (
29
domhelpers.getNodeText(link), domhelpers.getNodeText(title))
30
for (title, link) in itms])
31
).addCallback(lambda s: (request.write(s),request.finish())).addErrback(
32
lambda e: (request.write('Error: %s' % e),request.finish()))
33
return server.NOT_DONE_YET
35
resource = LJSyndicatingResource()