Thekey.iT

  • Aumenta dimensione caratteri
  • Dimensione caratteri predefinita
  • Diminuisci dimensione caratteri
Home }}} Articoli }}} Hacking }}} Facebook Data-Mining

Facebook Data-Mining

E-mail Stampa
Valutazione attuale: / 9
ScarsoOttimo 

Qualche tempo fa parlavo con alcuni amici di Facebook, di quante informazioni ci siano dentro questo sito, e di quanto sarebbe interessante fare del Data-mining per "estrarre" alcune di queste informazioni... Immaginate quante cose si possono sapere su di voi andando a spulciare tra i vostri amici e tra le pagine di cui siete fan...

Photo by Lei Chen - http://www.flickr.com/photos/77129472@N00/

In seguito a questo scambio di idee mi sono messo a ragionare un po' su come fare del Data-mining (http://it.wikipedia.org/wiki/Data_mining) e ne sono uscito con uno script in perl che fa un paio di cosettine interessanti. Ovviamente non è nulla di particolarmente elaborato, si tratta semplicemente di un "proof of concept" (http://it.wikipedia.org/wiki/Proof_of_concept) realizzato solo per provare, infatti, non avendo un target specifico di informazioni che mi interessava estrarre, mi sono solo messo a tracciare le relazioni tra i miei amici in modo da poterle visualizzare in un grafico, cosa che non ha questa grande utilità... o forse si?

Tool utilizzati:

  • Perl (http://www.perl.org/)
    per scrivere lo spider che estrae i dati dalle pagine web e salvarli in un formato leggibile da Cytoscape.
  • Cytoscape (http://www.cytoscape.org/)
    per analizzare i dati estratti e disegnare la mappa della rete di amici.
    ( se non conoscete questo software non posso fare molto, cercate informazioni online oppure leggetevi il manuale sul sito, spiegare come usare questo software va oltre lo scopo di questo articolo )

Una cosa interessante di questo script è che NON E' NECESSARIO essere iscritti a Facebook per poterlo usare, quindi chiunque ci può fare esperimenti. Questa scelta è voluta perchè è interessante capire cosa si può estrarre e conoscere andando a spulciare le pagine di Facebook senza doversi iscrivere, diciamo pure in modo quasi anonimo.

Come faccio dunque a visualizzare gli amici di una persona se non sono iscritto a Facebook? Facile, basta semplicemente andare a visualizzare il profilo pubblico della persona che ci interessa. Sulla pagina pubblica infatti troveremo alcuni degli amici della persona, tipicamente sono 8, ma se facciamo un refresh della pagina troveremo altri 8 amici, e se ripetiamo ancora altri 8 amici random verranno visualizzati... A questo punto il gioco è fatto, basta fare refresh multipli della pagina ed estrarre ogni volta gli amici che compaiono, automatizzando questa cosa posso andare a mappare tutti gli amici di chiunque, senza neanche essere iscritto a Facebook.

E come fare a trovare il profilo pubblico di una persona? Anche questo è facile, basta usare un qualsiasi motore di ricerca, provate a cercare il nome della persona che vi interessa e state sicuri che la pagina di Facebook sarà tra i primi risultati della ricerca. Questa non è una regola fissa ma ci si azzecca abbastanza.

Attenzione:
Questo "trucco", e lo script che ho realizzato si basa su questo, funziona perchè quasi nessuno impedisce l'accesso ai motori di ricerca nelle opzioni di gestione privacy del proprio profilo, se lo facessero questo script non potrebbe funzionare visto che in tal caso la pagina pubblica sarebbe praticamente vuota.


La prima modalità di lavoro (mode=0) - Quanti amici hai?
Ecco dunque gia fatta la prima funzione dello script, la mappatura degli amici di qualcuno. Dato l'ID di un utente di Facebook, lo script inizia a caricare la pagina con i dati pubblici creandosi cosi la lista degli amici dell'utente che stiamo analizzando. Ovviamente questa cosa non sarà sicura al 100% in quanto potrebbe accadere che alcuni amici non vengano mai visualizzati sul profilo pubblico, ma dai test che ho effettuato direi che ci andiamo molto vicino, tipicamente il 90% degli amici viene estratto.

La seconda modalità di lavoro (mode=1) - Quali sono i gruppi di amici?
Sapere gli amici di qualcuno è interessante, ma sapere anche le relazioni tra gli amici degli amici è molto più interessante, si possono mappare e analizzare intere comunità di persone guardando le relazioni tra di loro... ecco cosi che nasce la seconda modalità di lavoro dello script: mappare non solo gli amici ma anche gli amici degli amici in modo da poter vedere chi è amico di chi. In questo modo ci si può fare un'idea di quali siano i gruppi di amici di una persona o di più persone, i gruppi più affiatati e vicini, gli interessi. Immaginate di mappare una comunità in cui una delle persone è "pubblicamente esposta", si potrebbero identificare i supporter, gli amici più intimi, tutte cose che possono rivelarsi molto interessanti.

Funziona davvero?
Ma veniamo ai risultati, in modo da capire un po meglio di cosa sto parlando, qui sotto potete vedere cosa è possibile ottenere sfruttando le potenzialità di un software quale Cytoscape: nell'immagine potete vedere la mappa delle relazioni esistenti tra alcuni dei miei amici, dico alcuni perchè fare la mappa completa mi richiedeva troppo tempo e troppa banda, quindi ho analizzato solo 8 amici fino ad una distanza di 3. (Più sotto capirete cosa intendo con 8 amici fino a distanza 3)

Come usare lo script
L'uso dello script è veramente semplice e richiede pochi parametri, vediamoli in modo da sapere dove recuperarli e come usarli:

[F-UID] (usato in mode 0 e mode 1) è l'ID univoco della persona iniziale, ne esistono di due tipi, in base alla tipologia di link che Facebook usa per il profilo degli utenti, per ottenerlo basta controllare l'URL del profilo della persona che ci interessa:

Cytoscape

  • se il link fosse del tipo http://www.facebook.com/NOME.COGNOME
    l'[F-UID] è NOME.COGNOME
  • se il link fosse del tipo http://www.facebook.com/profile.php?id=123456789
    l'[F-UID] è 123456789

I link potrebbero essere leggermente diversi, ma credo siate in grado di capire come estrarre il codice corretto anche da soli.

[FRIENDSTOGRAB] (usato in mode 1) è il numero massimo di amici che si vogliono estrarre per la persona che si sta analizzando, considerate che numeri < 8 sono inutili perchè nella pagina del profilo pubblico 8 amici si trovano sempre, e che numeri troppo grandi portano ovviamente a maggiori quantita di dati da analizzare.
Se impostato a 0 (zero) il limite viene ignorato e quindi lo script cerca di estrarre tutti gli amici possibili.

[DISTANCE] (usato in mode 1) è la distanza massima dalla persona iniziale che vogliamo raggiungere. Per esempio se impostato a 1 otterremo solo gli amici, se impostato a 2 otterremo gli amici + gli amici degli amici,  e così via. Attenzione che man mano che si aumenta la distanza la quantità di dati aumenta in modo esponenziale...
Facciamo un esempio: estraendo un massimo di 8 amici fino ad una distanza di 3 otteniamo: 1 (persona di partenza) + 8 (gli amici) + 8*8 (gli amici degli amici) = 73 persone.

Vediamo ora due esempi d'uso:
Per estrarre gli amici di una persona: faceminer.pl 0 123456789
Per estrarre la rete degli amici vicini ad una persona: faceminer.pl 1 123456789 8 3

Analizziamo i risultati ottenuti
L'esecuzione dello script porterà alla creazione di due file: faceminer.sif e canonicaName.NA. Questi due file, che contengono tutte le relazioni tra le persone estratte con i rispettivi nomi, dovranno essere importati in Cytoscape per poter essere analizzati e visualizzati in modalità grafica.

Apriamo quindi Cytoscape e tramite il menu: File => Import => Network (multiple file type), importiamo il file faceminer.sif. Completata l'importazione del file, dobbiamo importare il file con i nomi dei nodi della nostra rete, per fare questo usiamo il menu: File => Import => Node Attributes, e selezioniamo il file canonicalName.NA.
A questo punto selezioniamo il tab WizMapper e come Node Label andiamo a selezionare canonicalName, dal menu Layout andiamo poi a selezionare la visualizzazione che preferiamo della mappa; provate ad esempio Layout => yFiles => Circular e guardate come la vostra rete di amici prenderà forma.

Cosa manca?
Come dicevo ad inizio articolo questo script è solo un "proof of concept", niente più. Questo script può essere però una base interessante per costruire qualcosa di più grande e soprattutto di fatto meglio, vi lascio con una serie di idee che potrebbero magari stuzzicarvi e portarvi a costruire qualcosa di interessante:

  • Salvare lo stato del lavoro, se interrompo lo script prima della fine devo ricominciare da capo.
  • Salvare i dati in un Database invece che creare file per Cytoscape.
  • Effettuare connessioni multiple in modo da poter aumentare la velocità di spidering delle pagine, un bel fork non sarebbe male ed è abbastanza facile da implementare.
  • Supportare proxy e/o tecniche differenti (impersonare browser differenti per dirne una) per nascondere le intenzioni dello script.
  • Estrarre altre tipologie di dati oltre ai legami tra gli amici: nel profilo pubblico di una persona per esempio compaiono anche informazione sulle "pagine" di cui si è fan, si possono vedere i prodotti, la musica i negozi preferiti... Tutta roba interessante per fare analisi di mercato.

Ci sono migliaia di cose che si possono fare, basta solo un poco di fantasia e curiosità.

Conclusioni
Ora che aveve visto con i vostri occhi cosa è possibile sapere su un qualunque utente di Facebook senza nemmeno iscriversi a Facebook, provate ad immaginare quanto si può sapere di una persona se si è iscritti visto che in tal caso potreste accedere anche alla bacheca personale, ma soprattutto provate ad immaginare cosa Facebook stessa può sapere di voi !!!! Pensateci, pensateci molto bene, e fate attenzione a quello che pubblicate perchè non potete sapere chi leggerà quello che condividete.

DISCLAIMER
Ovviamente tutto quello che è stato scritto e condiviso in questo articolo è solo a titolo informativo, meglio saperle le cose in modo da potersi proteggere. Io in ogni caso non mi ritengo responsabile delle vostre azioni, quindi fate bene attenzione a quello che fate con quanto appreso in questo articolo. Come sempre ogni medaglia ha due facce... Scegliete quella giusta!

Appunto
Se grazie a quanto appreso qui, riuscite a diventare ricchi... beh una donazione la accetto sempre volentieri :-)

 

Scarica faceminer.pl

Scarica lo script faceminer.pl

 

Fonti:

  • L'immagine introduttiva è opera di Lei Chen

 

Eremita Solitario aka aeniGma


Ultimo aggiornamento Sabato 27 Febbraio 2010 22:10  
Commenti (3)
non ti smentisci mai...
1 Giovedì 04 Marzo 2010 09:40
Andrea
mi vengono in mente almeno una decina di campi di applicazione dello script. ne parliamo di persona....
banalmente: cosa ne dici di incrociare più network e, ad esempio, informazioni come Aziende in cui ha lavorato, precedenti esperienze professionali, contatti... da Linkedin, cosa sta facendo da twitter...

mitico

c3rb3rus
ti dirò di più...
2 Giovedì 04 Marzo 2010 14:17
Eremita Solitario
... pensa che quando sei loggato a facebook vedi molte più cose ...
De-Anonymizing Social Network Users
3 Lunedì 08 Marzo 2010 20:43
Eremita Solitario
Un interessante articolo (in inglese) su come de-anonimizzare i social network:

http://www.schneier.com/blog/archives/2010/03/de-anonymizing.html

Assolutamente da leggere

Google search

Ricerca personalizzata

Fatti riconoscere


Petizioni

stopsoftwarepatents.eu petition banner

Sondaggi

Choose your color
 

Random quote

You may stop this individual, but you can't stop us all... after all, we're all alike.

The Mentor

Social Bookmark

Facebook myspace del.icio.us digg mixx reddit stumbleupon Twitter Google
diggita OkNotizie Segnalo UpNews ZicZac Wikio Fai Informazione