#!/usr/bin/env python # test.py import pygtk pygtk.require('2.0') import gtk import atomblogger import testbloggerdialog import passworddialog from xml.sax import saxutils from xml.sax import make_parser from xml.sax import parseString from xml.sax.handler import feature_namespaces from xml.sax import ContentHandler import string def normalize_whitespace(text): "Remove redundantwhitespace from a string" return ' '.join(text.split()) class FindWriter(ContentHandler): def __init__(self, search_name): # save the name we're looking for self.search_name = normalize_whitespace(search_name) # initialize the flag to false self.inWriterContent = 0 def startElement(self, name, attrs): # if it is a comic element, save the title and issue if name == 'comic': title = normalize_whitespace(attrs.get('title', "")) number = normalize_whitespace(attrs.get('number', "")) self.this_title = title self.this_number = number # if it's the start of a writer element, set the flag elif name == 'writer': self.inWriterContent = 1 self.writerName = "" def characters(self, ch): if self.inWriterContent: self.writerName = self.writerName + ch def endElement(self, name): if name == 'writer': self.inWriterContent = 0 self.writerName = normalize_whitespace(self.writerName) if self.search_name == self.writerName: print 'Found:', self.this_title, self.this_number class FindIssue(saxutils.DefaultHandler): def __init__(self, title, number): self.search_title, self.search_number = title, number def error(self, exception): import sys sys.stderr.write("%s\n" % exception) def startElement(self, name, attrs): print "Parsing element " + name + "..." if name != 'comic': return #look for title and number attributes title = attrs.get('title', None) number = attrs.get('number', None) if(title == self.search_title and number == self.search_number): print title, '#' + str(number), 'found' class TestBlogger: def onSendData(self, data): print data def onGetBlogListXML(self): print "Getting blog list..." #self.md.setReceiveBoxText(self.bc.getBlogListXML()) handler = atomblogger.FindBlogs('service.feed') parseString(self.bc.getBlogListXML(), handler) blogIDs = '' for blogID in handler.blogIDs: blogIDs = blogIDs + blogID self.md.setReceiveBoxText(blogIDs) def onGetRecentPostsXML(self, blogID): print "Getting recent posts for blog " + blogID + "..." #self.md.setReceiveBoxText(self.bc.getRecentPostsXML(blogID)) handler = atomblogger.RecentPostsHandler() parseString(self.bc.getRecentPostsXML(blogID), handler) entries = '' # display info print "service feed:\t" + handler.blog.serviceFeed print "service feed title:\t" + handler.blog.serviceFeedTitle print "service post:\t" + handler.blog.servicePost print "service post title:\t" + handler.blog.servicePostTitle print "title:\t" + handler.blog.title print "tagline:\t" + handler.blog.tagline print "location:\t" + handler.blog.location print "modified:\t" + handler.blog.modified print "generator url:\t" + handler.blog.generatorURL print "generator name:\t" + handler.blog.generatorName print "info:\t" + handler.blog.info print "convert line breaks:\t" + handler.blog.convertLineBreaks for p in handler.blog.posts: print "" print "*** POST:" + p.postID + " ***" print "Author name:\t" + p.authorName print "issued:\t" + p.issued print "modified:\t" + p.modified print "created:\t" + p.created print "location:\t" + p.location print "title:\t" + p.title print "content:\t" + p.content print "draft:\t" + p.draft print "" print "[ Unhandled tags ]" for t in handler.leftoverTags: print t def onGetPostXML(self, postID): print "Getting post " + postID + "..." self.md.setReceiveBoxText(self.bc.getPostXML()) def onQuit(self): gtk.main_quit() self.bc.closeConnection() return False def onSubmitPassword(self, name, passwd): print "Password submitted." print "Initializing main dialog..." self.md = testbloggerdialog.MainDialog() self.md.setSendDataCallback(self.onSendData) self.md.setGetBlogListXMLCallback(self.onGetBlogListXML) self.md.setGetRecentPostsXMLCallback(self.onGetRecentPostsXML) self.md.setGetPostXMLCallback(self.onGetPostXML) self.md.setQuitCallback(self.onQuit) print "Initializing blogger.com connection..." self.bc = atomblogger.BloggerConnection("www.blogger.com") self.bc.connect(name, passwd) def __init__(self): print "Initializing password prompt..." pdialog = passworddialog.PasswordDialog() pdialog.setPasswordCallback(self.onSubmitPassword) gtk.main() print "gtk.main() started!" def main(): tb = TestBlogger() if __name__ == "__main__": main() # dh = FindIssue('Sandman', '62') # dh2 = FindWriter('Neil Gaiman') # parseString("Neil GaimanGlyn DillonCharles Vess", dh2)