Subversion Repositories Plazes

[/] [NodeBox/] [Plazes.py] - Rev 124

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)
 
 
 
 

Compare with Previous | Blame | View Log