I want to get the contents of a list of URLs, and if the getPage is successful then I want to write it to a file. If it fails, I want to log a message. In addition, I would like to have this process run every five minutes.

The problem is how to specify a yes/no scenario when the callbacks take arguments. Also, is the best way to loop to just put FeederProtocol.start() in a loop? any ehlp would be greatly appreciated.

while true:
get page
if error:
log
else:
write to file

sleep 5 minutes

class FeederProtocol(object):

def get_page_error(self, _failure, log, feed_name):
""" Failure while getting page. """
msg = 'While getting %s: %s' % (feed_name, _failure.getTraceback())
log.error(msg)
_failure.trap(RuntimeError) # Caused chain to stop
raise(RuntimeError)

get_page(url):
return client.getPage(url, timeout=30)

def page_to_file(self, feed, name):
try:
fnout = os.path.join(app_conf['download_dir'], name)
fout = open(fnout, 'w')
except IOError, e:
log.error('Opening %s: %s' % (fnout, e))
return

try:
fout.write(feed)
except IOError, e:
log.error('Wrting to %s: %s' % (fnout, e))
finally:
fout.close()

def start(self, urls):
for url in urls:
d = defer.succeed(self.printStatus())
d.addCallback(self.get_page, feed, log, app_conf)
d.addCallbacks((self.page_to_file, log, app_conf), (self.get_page_error, log, feed[0]))

class FeederFactory(protocol.ClientFactory):
protocol = FeederProtocol()

def __init__(self, url_list):
urls = url_list
self.start(self.urls)

def start(self, urls):
protocol.start(urls)


if __name__=="__main__":
name = 'mytest'
urls = ['www.example.com', 'www.example2.com']

f = FeederFactory(urls)
reactor.run()
_______________________________________________
Twisted-web mailing list
[email protected]
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web

Reply via email to