Compare with Previous | Blame | View Log
import sys, os import urllib import urllib2 import commands import base64 import array from xml.dom.minidom import parseString class Edge: def __init__(self,nodefrom,nodeto): self.nodefrom = nodefrom; self.nodeto = nodeto; class PlazesRelations: def __init__(self,username): self.plazesurl = 'http://plazes.com/'; self.plazes_username = username; self.edges = []; self.lookedup = {}; self.hasneighbors = {}; self.counted = {}; self.counter = 0; self.usersperpage = 50; self.get_trustees(username,1) def get_trustees(self,fromuser,level): self.lookedup[fromuser] = True offset = 0 done = False while (not done): address = self.plazesurl + 'users/' + fromuser + '/trustees.xml?offset=' + str(offset) print "Getting trustee data from " + address request = self.prepare_get_request(address) opener = urllib2.build_opener() try: trustees = opener.open(request).read() howmanyusers = self.parse_plaze_xml(trustees, fromuser, level) except IOError, e: if hasattr(e, 'code'): print 'Got Error code: ', e.code print e.read() print "Got " + str(howmanyusers) + " users" if (howmanyusers == self.usersperpage): offset = offset + self.usersperpage else: done = True def prepare_get_request(self, url): request = urllib2.Request(url) request.add_header('User-Agent', 'device: api') request.add_header('Content-Type', 'application/xml') return request def parse_plaze_xml(self, xml, fromuser, level): dom = parseString(xml) users = dom.getElementsByTagName('user') if (len(users) > 0): for user in users: name = str(user.getElementsByTagName('name')[0].firstChild.data) self.hasneighbors[fromuser] = True print "Adding edge: " + fromuser + " -> " + name e = Edge(fromuser, name) self.edges.append(e) if (name not in self.counted): self.counter = self.counter + 1 self. counted[name] = True if ((level == 1)): if (name not in self.lookedup): self.get_trustees(name,2) return len(users) def make_graph(self): graph = ximport("graph") size(1024, 1024) g = graph.create() for o in self.edges: if (o.nodeto in self.hasneighbors): g.add_edge(o.nodefrom,o.nodeto) g.solve() g.styles.fontsize = 6 g.styles.dark.text = color(1,.5,.5) g.styles.dark. fontsize = 8 g.styles.important.text = color(1,.25,.25) g.styles.important.fontsize = 10 g.styles.apply() g.draw( directed=False, traffic=0 ) t = PlazesRelations('ruk') t.make_graph() print "Total nodes" + str(t.counter)