#!/usr/bin/python import twitter, simplejson, time class ApiEstesa (twitter.Api): ''' Estende Api per recuperare i friends di un user diverso dal proprio ''' def __init__(self): twitter.Api.__init__(self) def GetAnotherOneFriends(self, username, password, identificativo): url = 'http://twitter.com/statuses/friends/'+str(identificativo)+'.json' json = self._FetchUrl(url, username=username, password=password) data = simplejson.loads(json) return [twitter.User.NewFromJsonDict(x) for x in data] def aggiungi_soggetti (utenti, relazioni, id): '''Aggiunge gli id dei friends dell'utente con identificativo ID al dizionario id_soggetti''' try: friends = api.GetAnotherOneFriends(user, password, id) except: print 'Errore nel recupero dei dati da Twitter: attendo 10 secondi e riprovo' time.sleep(10) friends = api.GetAnotherOneFriends(user, password, id) for friend in friends: utenti.setdefault(friend.id, friend.screen_name) relazioni.append(' '+str(id)+' -- '+str(friend.id)+'\n') api = ApiEstesa() user = 'vostro_user' password= 'vostra_password' identificativo = 'vostro_id' screen_name = 'vostro_nome_visualizzato' # Recupero i friends del soggetto principale friends = api.GetFriends(user, password) # Uso un dizionario per evitare la duplicazione degli utenti; aggiungo subito il soggetto principale id_utenti = {} id_utenti.setdefault(identificativo, screen_name) relazioni = [] for friend in friends: # Aggiungo i friends del soggetto principale al dizionario id_utenti id_utenti.setdefault(friend.id, friend.screen_name) # Aggiungo le relazioni del soggetto principale relazioni.append(' '+identificativo+' -- '+str(friend.id)+'\n') # Aggiungo i friends e le relazioni del friend che sto controllando aggiungi_soggetti(id_utenti, relazioni, friend.id) print 'Aggiungo soggetto e relazioni di '+friend.screen_name lista_utenti = id_utenti.items() # Trasformo il dizionario in una lista inizio_file = '''graph relazioni_twitter { graph [bgcolor=black, overlap="scale", ratio="auto"]; node [fontcolor="white", fontsize="10", shape="circle", color="antiquewhite"]; edge [color="gold1"];\n''' f = open('grafico_prova.dot','w') # Scrivo su file la parte iniziale del grafo f.writelines(inizio_file) # Scrivo la label del nodo root (soggetto principale) f.writelines(' %s [label="%s", root="1", fontcolor="red",shape="circle"];\n' % (identificativo, screen_name)) # Scrivo su file tutti i soggetti raccolti in lista_utenti print '%s nodi, %s relazioni' % (str(len(lista_utenti)),str(len(relazioni))) for utente in lista_utenti: f.write(' %s [label="%s"];\n' % utente) f.writelines('\n') for relazione in relazioni: f.write(relazione) f.writelines('}\n') f.close()