Magazine Internet

Php - Exporter les fans d'une page facebook dans un .csv

Publié le 12 février 2011 par Gpenverne

J'ai eu besoin d'exporter une liste de fans d'une page facebook (dont j'étais administrateur). Je n'ai pas trouvé d'application ni de script me permettant de le faire simplement. Sur google, j'ai trouvé un script python, qui, cependant, ne fonctionnait pas :(

Je suis donc parti de deux sources trouvées sur le net :

Retrouver le créateur d’une fanpage sur Facebook : http://www.paulds.fr/2010/04/retrouver-le-createur-dune-fanpage-sur-facebook/ 

Python Script: Export a list of Facebook Fans for a Page to CSV : http://ctolsen.posterous.com/python-script-export-a-list-of-facebook-fans

Les 2 scripts avaient un point commun : ils utilisaient le cookie que facebook enregistre sur votre poste. A partir de là...

Je vous laisse découvrir la suite ;-)

La base :

Nous allons utiliser curl, pour envoyer/récupèrer les informations à/de Facebook.

Nous allons avoir besoin de 2 éléments : votre cookie, et l'id de votre page. Pour retrouver l'id de votre page, rien de plus simple : regarder la source de votre page et cherchez l'adresse du flux rss. Elle se termine par un numéro, c'est l'id de votre page.

Pour le cookie, vous pouvez fouiller dans les préférences de votre navigateur. Vous trouverez plusieurs valeurs, concaténez-les, afin d'obtenir quelque chose du genre :

datr=xxxxxxxx; lu=xxxxx; locale=fr_FR; cur_max_lag=xx; x-referer=xxxxxxxx; c_user=xxxxxx; sct=xxxxx; sid=xx; xs=xxxxxx; presence=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; 

(ou utilisez l'extension firefox "tamper data" qui vous permettra de retrouver cette chaîne prête à l'emploi :) )

Notez bien cette chaîne, nous la mettrons dans une variable, dans le script php.

Nous aurons également besoin de 2 valeurs, correspondant à des champs "hidden" dans le code source de votre fanpage. Il s'agit de post_form_id et de fb_dtsg . Un simple affichage de la source de la page et un ctrl-f (rechercher) vous permettra de trouver ces valeurs.

Le script : 

<?php

// Le script est lent. Donc, pour éviter les mauvaises surprises, on laisse le script tourner autant que nécessaire.

set_time_limit(0);

// L'id de votre page, que vous avez récupéré comme expliqué ci-dessus.

$pid='id_de_votre_page' ;

// La valeur de votre cookie :

$cookie='datr=xxxxxxxx; lu=xxxxx; locale=fr_FR; cur_max_lag=xx; x-referer=xxxxxxxx; c_user=xxxxxx; sct=xxxxx; sid=xx; xs=xxxxxx; presence=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;';

// Les valeurs des champs hidden mentionnés ci-dessus :

$form_id = 'xxxxxxxxxxxx';

$dtsg = 'xxxxxx'

// On va parcourir toutes les pages de la liste des fans. J'ai mis "100", c'est totalement arbitraire. Mettez + ou -, l'idée est de parcourir toutes les pages.

while($p<=100){

$url='http://www.facebook.com/ajax/social_graph/fetch.php?__a=1';

$dstr='edge_type=fan&page='.$p.'&limit=5000&p=&node_id='.$pid.'&class=FanManager&post_form_id='.$form_id.'&fb_dtsg='.$dtsg.'&lsd&post_form_id_source=AsyncRequest';

// on transforme notre chaine en tableau, prêt à être envoyé en POST

$dstr=explode('&', $dstr);

foreach($dstr as $d){

$d=explode('=', $d);

$datas[$d[0]]=$d[1];

}

// On prépare notre requête curl

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $datas);

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch, CURLOPT_COOKIE, $cookie);

curl_setopt($ch, CURLOPT_USERAGENT ,'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9) Gecko/2008052906 Firefox/3.0');

//curl_setopt($ch, CURLOPT_TIMEOUT, 60); 

$json = curl_exec($ch);

// Nous disposons à présent d'une string qui est PRESQUE du json.

$json=eregi_replace("for (;;);", '', $json);

// A présent, notre chaine est du json exploitable.

// Si ce n'est pas le cas, c'est surement que la page renvoyée par fb est vide, et que donc nous avons atteint la dernière page.

$obj = json_decode($json)or die();

// Nous préparons la chaine qui sera enregistrée dans le fichier csv de destination

$fichier_csv='';

// On parcourir l'objet json, à la recherche de nos précieux utilisateurs.

foreach($obj->payload->user_info as $user){

// pour éviter les doublons, on incrémente un tableau, et on vérifie à chaque fois si l'on a pas déjà rencontré cet user_id.

if(!$setted[$user->id]){

$setted[$user->id]=1;

// On affiche notre ligne csv

echo utf8_decode($user->title).';'.$user->href." ";

// on incrémente la variable csv

$fichier_csv.=utf8_decode($user->title).';'.$user->href." ";

}

}

// On ajoute notre csv au fichier csv

$fans=file_get_contents('fans.csv');

$fp=fopen('fans.csv', 'w+');

fputs($fp, $fans.$fichier_csv);

fclose($fp);

// et on passe à la page suivante.

$p++;

}

?>

Au final, on se retrouve avec un joli csv, même si la boucle qui tourne 100fois  n'est pas d'une propreté exemplaire : elle a le mérite d'être fonctionnelle, surtout. :)


Edit:
Vous pouvez accèder aux sources ici :
"Exporter les fans d'une page facebook au format csv en php" - http://pastie.org/1317547 "Exporter ses amis facebook au format csv en php" - http://pastie.org/1317665

Retour à La Une de Logo Paperblog

A propos de l’auteur


Gpenverne 8345 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Magazine