Compare with Previous | Blame | View Log
import sys, os import urllib import urllib2 import commands import base64 import array import networkx as NX import pylab as P 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): g=NX.Graph() for o in self.edges: if (o.nodeto in self.hasneighbors): print o.nodefrom + " -> " + o.nodeto g.add_edge(o.nodefrom,o.nodeto) print g.edges() NX.write_edgelist(g, self.plazes_username + ".edgelist") NX.draw(g,node_size=[g.degree(v)*20 for v in g],font_size=5,alpha=0.5,node_color='w') P.title(self.plazes_username + "'s Plazes Network") P.axis('off') P.savefig(self.plazes_username + ".pdf") t = PlazesRelations('ruk') t.make_graph()