Pascal le nain | Actuellement, il n'existe aucun outil ou application pour extraire les noms des fans d'une "page" facebook.
J'ai donc décider de faire ma version en php (trop galère en C )
J'utilise file_get_contents() avec un contexte, pour choisir les options d'entête.
Je veux faire croire à Facebook que je veux charger la lightbox listant les fans 100 par 100 comme si j'étais sur un navigateur classique.
Le but étant de récupérer le code html/javascript de la liste pour en extraire les noms des fans.
J'ai analysé avec wireshark les entêtes et cookies envoyé par mon navigateur quand il fait la requète de façon classique.
J'ai ensuite analysé la réponse de facebook. Les entêtes reçues sont correctes (200 OK).
Par contre je ne reçois pas du code html comme prévu, mais une bouillie de caratères pas vraiment lisible.
//Entêtes envoyées
Host: www.facebook.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.0.15) Gecko/2009101601 Firefox/3.0.15 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
X-SVN-Rev: 199440
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://www.facebook.com/home.php
Content-Length: 167
Cookie:plein de truc que je vous dis pas =D
Pragma: no-cache
Cache-Control: no-cache
//Body de la requête POST
edge_type=fan&page=1&limit=100&class=FanManager&node_id=110534460377&post_form_id=0fb5daac8db470a1c972ff2efb84eeea&fb_dtsg=pkPRc&post_form_id_source=AsyncRequest&__a=1
//Réponse de Facebook
’ÄVÓ¦ÈnJ”ÓòßçÜ"k±DfØ¢^>Õ`Æ™¾/«u]w9w»ªjëüñÿ~üý,«ëª>{d?hÿ߇f½fõÝÙ£³³Žò4Û,êüf›W¥F}µù«Ë¼=ºbÅ&{pvÃ-Ïý~Öl²:ÍË«Š~ˆƒÄ‰mßè‡ÿ^œmóm‘ë‡|]•Öû?ãµ×uvâõv{óèòáåï_¿Î®Ø"›WÕ—Ù¢Z_>¼©««¼Èf7×7?çËŸ$ÇÿÁ“?mVk0Ù4sÁ?Ýä£xž}™]ÍËrVfÛˇ;×
/:¶]>Äo%Û4‰œdöùfNu¶®v›Ó¹·uƒ_¼¥<®Wú
×wiõßT÷ä›”-×9í‡ñsÁ6[Aì>µ`e:ÏÒyQ-¾døŠè³<8cúÖ?f¿mqø§—mgÉ&_•YmákXggo¶5ÛfMÓµOàÓkö%ë^"¨§?!Žè„v„qxB¼Š¢ä{ž¯.ò-dmý«*®¤ˆË¦(þ‹¤6[¶Í³ïinŸt“×U“m·Ùl•[#õ×Â]üŽ<Û²‘%š§¬`…õºúšiwï@0¯›¯Œÿû½‹dÄsìí†x";ì0ñC!IPâyÂê
×æŸÒ2¥ü‰ÙŽ?ñóT…=èø±sù0HpãäS?r|£t6IÕsè@×—R%ÕÇe™Yïs¨ýQ"eøø7•ýò|^³rA;Æš¹�ò`ë<öV8õ|×6Bíjh'Q9®´r’ „ú&_³¬°ÞT×Ý(Áîù1’é4?¦ã
!»$äЇ%ë4qϹWÈQä&IœH}
Yen a une pleine page, mais je fais court.
|
On dirait une image, mais je ne parviens pas à l'ouvrir.
Le procédé fonctionne en ruby dans ce tuto : http://adamloving.com/internet-pro [...] -page-fans
J'ai essayé ca fonctionne.
Voici le code de ma page php :
L'utilisateur copie/colle les entêtes qu'il a captées avec wireshark.
Code :
- <?php
- //Isolement des parties importantes
- $headers = strstr($_POST['post_entete'],'Host:');
- $contenu = strstr($_POST['post_body'],'edge_type');
- // Définition des champs du formulaire POST
- parse_str($contenu, $result);
- $donnees = array();
- foreach($result as $key=>$value)
- {
- $donnees[$key] = $value;
- }
- // Création du contenu brut de la requête
- $contenu = http_build_query( $donnees );
- // Définition du contexte
- $options = array( 'http' => array( 'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0',
- 'method' => 'POST',
- 'content' => $contenu,
- 'header' => $headers ) );
- // Création du contexte
- $contexte = stream_context_create( $options );
- echo nl2br($headers);echo '
- ';
- echo nl2br($contenu);
- echo '
- ';
- // Envoi du formulaire POST
- $retour = file_get_contents( 'http://www.facebook.com/ajax/social_graph/fetch.php', false, $contexte );
- echo nl2br($retour);
- ?>
|
Pouvez-vous m'aider, merci d'avance  Message édité par Pascal le nain le 10-11-2009 à 13:03:55
|