Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1372 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Récupérer des fans de page facebook

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Récupérer des fans de page facebook

n°1939382
Pascal le ​nain
Posté le 10-11-2009 à 12:58:39  profilanswer
 

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  :D )
 
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ákXggo¶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 :
  1. <?php
  2. //Isolement des parties importantes
  3. $headers = strstr($_POST['post_entete'],'Host:');
  4. $contenu = strstr($_POST['post_body'],'edge_type');
  5. // Définition des champs du formulaire POST
  6. parse_str($contenu, $result);
  7. $donnees = array();
  8. foreach($result as $key=>$value)
  9. {
  10.     $donnees[$key] = $value;
  11. }
  12. // Création du contenu brut de la requête
  13. $contenu = http_build_query( $donnees );
  14. // Définition du contexte
  15. $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',
  16. 'method' => 'POST',
  17. 'content' => $contenu,
  18. 'header' => $headers ) );
  19. // Création du contexte
  20. $contexte = stream_context_create( $options );
  21. echo nl2br($headers);echo '
  22. ';
  23. echo nl2br($contenu);
  24. echo '
  25. ';
  26. // Envoi du formulaire POST
  27. $retour = file_get_contents( 'http://www.facebook.com/ajax/social_graph/fetch.php', false, $contexte );
  28. echo nl2br($retour);
  29. ?>


Pouvez-vous m'aider, merci d'avance :)


Message édité par Pascal le nain le 10-11-2009 à 13:03:55
mood
Publicité
Posté le 10-11-2009 à 12:58:39  profilanswer
 

n°1939416
stealth35
Posté le 10-11-2009 à 15:47:12  profilanswer
 

c'est vrai que c'est pas top on peu pas récupérer cette info la sous prétexte que le page_id dans la table  page_fan  ne soit pas indexé
 
http://www.socialmeteor.com/wp-con [...] schema.pdf

n°1939839
Pascal le ​nain
Posté le 12-11-2009 à 01:07:24  profilanswer
 

Quelques nouvelles :
 
Ce problème est résolu. J'ai selectionné les headers important et envoyé seulement ceux-là.
Maintenant Facebook me renvoie bien le code javascript avec les noms dedans.
 
Le problème qui se pose maintenant est complexe. Tenez-vous bien.
 
Je parse les headers avec la fonction http_parse_headers() et je les récupère dans un tableau.
La fonction http_parse_headers() est disponible dans une extension PECL et la librairie s'appelle php_http.dll
Elle n'est pas présente de base dans PHP.
 
Une fois le code récupéré, je dois chercher les noms contenus. Pour cela, je fais un explode() sur la chaine, et je récupère un tableau avec les noms suivis du reste du code.


....e}},"547426212":{"id":547426212,"title":"Jean Dupond","href":"http:\/\/www.facebook.com\/jeandupond....
 
devient
 
Jean Dupond","href":"http:\/\/www.facebook.com\/jeandupond....
 


 
Il faut donc maintenant retirer ce qui se trouve après le nom.
 
Pour cela j'utilise la fonction strstr() avec un troisième parametre TRUE pour obtenir la chaine AVANT le repère.
Tout ca dans le but d'isoler

Jean Dupond


 
Le problème est que cette amélioration de la fonction strstr() (le 3ème paramètre) n'existe que depuis PHP 5.3, tandis que la librairie php_http.dll ne fonctionne pas (pas encore ?) pour PHP 5.3
 
Connaissez-vous une solution ?
Un équivalent à strstr() qui fonctionne sur PHP 5.2.x ?
un équivalent à http_parse_headers() qui fonctionne sur PHP 5.3.x ?
 
J'ai pensé tout d'abord aux expression régulière.
Mais l'exécution devient très longue, et puis je ne trouve par de fonction qui me retourne une chaine B coincée entre deux chaines A et C...
 
Une autre solution est de fabriquer sa propre fonction strstr() inversé, d'ailleurs les commentaires du site de PHP en regorgent. S'il n'y a pas d'autres solutions, je ferai ça...
 
Merci d'avoir lu, et d'avance pour votre aide  :hello:


Message édité par Pascal le nain le 12-11-2009 à 01:38:38
n°1939860
stealth35
Posté le 12-11-2009 à 09:39:51  profilanswer
 

pourquoi tu fais un explode, c'est du json,  tu devrais faire   json_decode

n°1939861
stealth35
Posté le 12-11-2009 à 09:49:19  profilanswer
 

$json = str_replace('for (;;);', '', $response);

 

$users = json_decode($json)->payload->user_info;

 

print_r($users);



Message édité par stealth35 le 12-11-2009 à 09:49:36
n°1939929
Pascal le ​nain
Posté le 12-11-2009 à 11:37:51  profilanswer
 

Oh merci je ne connaissais pas le json =D

n°1939936
stealth35
Posté le 12-11-2009 à 11:50:07  profilanswer
 

héhé, tout de suite c'est plus simple. en plus ta direct en Object (tu peu mettre a 'true' le 2eme parametre pour l'avoir en tableau assoc)

n°1940811
Pascal le ​nain
Posté le 14-11-2009 à 19:13:54  profilanswer
 

Voila, fini !  :D  
 
Peux-tu me donner ton avis ? Cela fonctionne chez toi ?
L'interface est-elle explicite ? La démarche est-elle claire ?
 
http://www.over9000project.fr/down [...] ractor.rar
 
Merci d'avance  ;)


Message édité par Pascal le nain le 14-11-2009 à 19:14:28

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Récupérer des fans de page facebook

 

Sujets relatifs
Mailing: récupérer automatiquement texte de l'adresseRécupérer certains fils d'un phpbb2 ?
Récupérer nom auteur d'une table newsParser une page HTML avec mot de passe
Faire un calcul sans rafraichir une page php[php] un include de contenu dans page sans rechargement : possible?
comment afficher une page php pour test ?Saisis active sur page web
Changement automatique d'une ligne sur chaque page html[C++][Gtkmm] Récupérer la ligne sélectionnée d'un TreeView
Plus de sujets relatifs à : Récupérer des fans de page facebook


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR