Sahid Ferdjaoui Blog - Funraill Foundation Bienvenue, Log in - thème 2007 RC1

Powered by OpenSource Softwares

Outil de déboggage colaborative
reduire

Récuperer ses contacts MSN, Gmail, Yahoo avec PHP

le 4 décembre 2007 par sahid

Classe PHP pour vos contacts MSN, Gmail Yahoo…

Pour les besoins d’un projet au boulot, j’ai du faire quelques recherches afin de trouver comment récupérer les contacts des boites msn, yahoo, gmail, et autres… le problème est que sur le net on trouve de nombreux Web service proposant ces fonctionnalités mais tres peu de librairies libres …

Apres de multiples recherches je suis tombé sur plusieurs classes intéressantes, et j’ai donc pensé les rassembler pour en faire un petit paquetage simple d’emploi

Présentation de la classe Contacts

En utilisant le pattern decorator et une petite factory je suis arrivé à faire en sorte de simplifier un maximum son utilisation

Un exemple du decorator avec Gmail

  1. class GmailDecorator
  2. {
  3.   private $_instance;
  4.   private $_user;
  5.   private $_pass;
  6.  
  7.   public function __construct ($user, $pass)
  8.   {
  9.     require (‘libs/importGmail.class.php’);
  10.     $this->_instance = new GMailer;
  11.     $this->_user = $user;
  12.     $this->_pass = $pass;
  13.   }
  14.  
  15.   public function getContacts ()
  16.   {
  17.     $result = array ();
  18.     if (!is_object ($this->_instance))
  19.       throw new Exception (“Aucune instance GMailer”);
  20.     $this->_instance->setLoginInfo ($this->_user, $this->_pass, “+1GMT”);
  21.     if ($this->_instance->connect ())
  22.       {
  23.         $this->_instance->fetchBox (GM_CONTACT, ‘all’, );
  24.         $snapshot = $this->_instance->getSnapshot (GM_CONTACT);
  25.         $this->_instance->disconnect ();
  26.         $i = 0;
  27.         if (isset ($snapshot->contacts))
  28.           foreach ($snapshot->contacts as $contact)
  29.             {
  30.               $result[$i][‘name’] = $contact[‘name’];
  31.               $result[$i][‘email’] = $contact[‘email’];
  32.               $i++;
  33.             }
  34.         return $result;
  35.       }
  36.     else
  37.       throw new Exception (‘Impossible de se connecter’);
  38.   }
  39. }
  40.  
  41. class YahooDecorator {}
  42. class MSNDecorator {}
  43. # etc …
  44.  

Ensuite la Factory s’occupe de nous retourner l’objet en fonction du type qu’on lui passe en paramètre

  1. class Contacts
  2. {
  3.   public static $arr_type = array (‘Gmail’, ‘MSN’, ‘Yahoo’, ‘Lycos’, ‘AOL’);
  4.  
  5.   public static function factory ($user, $pass, $type)
  6.   {
  7.     if (in_array ($type, self::$arr_type))
  8.       {
  9.         $class = “{$type}Decorator”;
  10.         return new $class ($user, $pass);
  11.       }
  12.     else throw new Exception (‘Invalide type, utilisez : ‘.implode (“, “, self::$arr_type));
  13.   }
  14. }

Etat du paquetage Contacts (MAJ : 27/08/08)

   Gmail Retourne un tableau vide
   Yahoo! Teste réussi avec @yahoo.fr
   AOL Teste réussi avec @aol.com
   Lycos Teste réussi avec @lycos.com
   MSN Teste réussi avec @hotmail.fr @hotmail.com

NOTE : Gmail, AOL, Yahoo, et Lycos, n’ont pas besoin du suffixe @host.com

Un petit exemple

36 commentaires pour Récuperer ses contacts MSN, Gmail, Yahoo avec PHP

  1. Jérémy dit :

    Salut!
    j’ai voulu tester ton code mais il ne marche que sous PHP5?
    il n’y a t’il pas un moyen de le faire fonctioner sous PHP4?

  2. sahid dit :

    Salut Jérémy

    Oui le code fonctionne seulement sur PHP5.
    Pour PHP4 tu peux essayer en enlevant la visibilité des methodes et pour les attributs tu remplaces par “var”

    Ensuite il m semble que PHP4 ne gere pas les bloc try catch ainsi que les exceptions, donc il faudra que tu enleves les “throw new Exception (’msg’)”, tu peux les remplacer par un “die (’msg’)”
    et dans le fichier usage.php il faut que tu enleves le bloc try catch.

    1. <?php
    2. # PHP 5
    3. class erf {
    4.   public $attr1;
    5.   public function maFunc () {}
    6. }
    7.  
    8. # PHP 4
    9. class erf {
    10.   var $attr1;
    11.   function maFunc () {}
    12. }
  3. Jérémy dit :

    Oki!
    merci je vais tester ca!
    ;-)

  4. tos dit :

    j’aimerais savoir ce qu’il faut faire quand on a un serveur PHP4 parce que j’ai essayé le commentaire au dessus et ça à l’air de pas fonctionner. Merci d’avance.

  5. Sebastien dit :

    Salut,
    C’est vraiment excellent !
    J’ai un problème avec la session quand je recupère du Gmail, ca me detruit la session, alors que j’en utilise dans mon site… ???
    Autre question, peut-on aussi recuperer les contacts Hotmail ?

    En tout cas merci encore.
    Sebastien

  6. Sahid dit :

    Salut tos,

    Déjà, je ne suis pas à ta dispo, donc… cool steuplé :), ensuite donne moi les erreurs que tu as je vais voir si je peux t’aider ?

    Salut Sebastien

    La classe fonctionne avec Hotmail, normalement tous les compte Live devraient fonctionner sans probleme (live.com, hotmail.fr/com/be etc…).

    Pour ton probleme de session, GMailer utilise bien les sessions mais je ne vois pas pourquoi il detruirait tes sessions… là je ne peux pas t’aider.

  7. Jérémy dit :

    Quand je lance Usage.php j’ai l’erreur “Curl n’est pas install”.
    J’ai enlevé le ; devant la ligne “extension=php_curl.dll” dans les fichiers php.ini-dist et php.ini-recommended, mais rien n’y fait :S.
    Comment y remédier?
    Merci d’avance.

  8. Sahid dit :

    hum a mon avis ce n’est pas suffisant, il faut que tu installes libcurl, tu as l’air d’etre sous windows et je ne sais pas du tt comment ca fonctfionne, mais google à surement cette info ;)

  9. Desque dit :

    Chalu, lorsque je lance le script, je tombe direct sur le message:
    Invalide type, utilisez : Gmail, MSN, Yahoo, Lycos, AOL.
    J’ai pourant tout ce qu’il faut, php5, libcurl…

  10. anthony dit :

    Salut Sahid,

    Excellent ce package! j’ai teste. Cela fonctionne bien avec Hotmail et yahoo. Avec gmail, j’avais moi aussi un probleme de session comme sebastien, cela venait de contact.php dans la class GmailDecorator a la ligne:
    “$this->_instance->disconnect ();”

    je l’ai mise en commentaire et maintenant gmail fonctionne aussi.

    Par contre j’ai un soucis avec Lycos, j’ai cree un compte et rajoute des contacts pour tester, mais le resultat est une page blanche…

    Une idee?

    Merci.

  11. Tom dit :

    Apparement la récup de mail via gmail ne fonctionne plus, peut etre que Gmail a modifié qq chose de son côté et qu’il faudrait mettre à jour un define ?

  12. Desque dit :

    meme pb que anthony
    Page blanche pour lycos, rien pour gmail.
    ca fait 2/4…

  13. anthony dit :

    Pour lycos et aol, il y a une erreur dans contact.php au niveau de de l’appel des fonctions:

    “$contacts = (array) @$this->_instance->getContactList ();”

    il y avait un ’s’ en trop, dc ca fesait appel a une fonction qui n’existait pas.

    Mais bon apres cette modif, il me renvoie pas une page blanche mais un array vide…..

  14. Desque dit :

    Anthony, si toute fois, tu arrives à faire marcher ce script pour les 4 comptes, pourrais tu m’en informer ici stp.
    Par avance, merci.

  15. Sahid dit :

    Salut,

    j’vais essayer de corriger les problemes ce week end,
    si vous avez des corrections à poster n’esités pas (http://pastebin.funraill.org/)

    j’aurais peut etre du le préciser, mais aucune des classes que j’utilise est officiel… je ne peux donc rien garantir. mais au moins corriger les bugs (;

  16. CELINE dit :

    bonjour,
    juste une question , peux tu me donner un chemin afin de retrouver mon mot de pass de GMAIL car je n est pas creer d adresser de recuperation .je suis dans une galere pas possible…….

    merci de ton aide

  17. Tom dit :

    Toujours aucune nouvelle concernant le problème avec gmail ?

  18. Jarodxxx dit :

    Salut a tous !
    Si ca peut aider quelqu’un j’ai fait un switch qui va vous permettre d’eviter une etape a la connexion en devinant le type de compte ..

    A placer avant $type = ”; dans usage.php

    1. $tem1 = explode(‘@’, $_POST[‘email’]);
    2.     $tem2 =explode(‘.’, $tem1[1]);
    3.  
    4.     switch(strtolower($tem2[0])){
    5.         case  ‘gmail’ : $type = ‘Gmail’; break;
    6.         case  ‘yahoo’ : $type = ‘Yahoo’; break;
    7.         case  ‘lycos’ : $type = ‘Lycos’; break;
    8.         case  ‘caramail’ : $type = ‘Lycos’; break;
    9.         case  ‘msn’ : $type = ‘MSN’; break;
    10.         case  ‘hotmail’ : $type = ‘MSN’; break;
    11.         case  ‘live’ : $type = ‘MSN’; break;
    12.         case  ‘aol’ : $type = ‘AOL’; break;
    13.     }
  19. Did dit :

    Salut à tous,
    lorsque je teste un compte gmail dans l’iframe de l’exemple, ça marche nickel.
    Par contre lorsque j’utilise le package télécharger impossible de récupérer mes contacts.
    Y a t il une différence entre l’exemple et le fichier du package.

    Merci d’avance.

  20. anthony dit :

    Salut,

    Merci Sahid pour toute ces modifs, ca semble fonctionner correctement :)

  21. Badoux C. dit :

    Salut et merci infiniment pour ta class, qui est vraiment très pratique ! ;)

    Juste une petite remarque:

    Tu devrais peut-être revoir la suppression des sessions par @session_unset() et @session_destroy(); ! Parce que moi même j’utilise des session et si je fais appel à l’une des class ex: “importGmail.class.php”, alors elle supprime auto toutes les sessions que j’ai initier. Ce qui est très gênant !
    Actuellement je les aient mises en standby, le temps que je les réorganises !

    Merci à toi !

  22. Maël M. dit :

    bonjour,

    lorsque tout d’abord merci pr ce script ! il marche ca il n’y a pas de doute par contre lorsque le l’exécute, il n’y a aucune mise en forme du texte ->

    Array ( [0] => Array ( [name] => nom [email] => nom@hotmail.com ) [1] => Array ( [name] => nom [email] => nom@hotmail.fr )

    je voulais savoir si c’était normal et qu’il fallait que je fasse moi mm la mise en forme ou bien qu’une class ne passe pas?

    merci.

  23. Seb dit :

    Bonjour Sahid,

    Simplement, merci pour cette belle contrib. Il me reste quelques corrections à faire pour adapter à mon cas précis, mais comme tu m’as grandement avancé dans les travaux…

    bref. Merci

    Seb

  24. David dit :

    Bonjour et merci pour ce package.
    Je l’utilise depuis 1-2 mois et je n’ai jamais eu de problème.
    Pourtant depuis 5 jours je n’ arrive plus à me connecter aux comptes en ‘msn.com’, alors que les autres comptes hotmail marchent bien, ainsi que les autres webmail …
    Quelqu’un aurait une idée de ce qui a pu se passer ?

  25. florian dit :

    Salut, merci pour ton script qui fonctionne bien, je voulais savoir si on peut implementer une methode pour envoyer un email grace a tes classes. Si oui, que faut’il faire pour envoyer un e-mail avec les identifiants de la personne fraichement connecter?

    Merci pour ta future reponse, bonne journee et bonne continuation!

  26. Thomas dit :

    Bonjour, je viens de tester la récupération des contacts sur un compte hotmail (en hotmail.fr) fraichement créée avec un contact bidon de rajouté, mais celui ci n’est pas récupéré (je reçoit un tableau vide) et je n’ai pas de message d’erreur, est-ce normal?

    Merci.

  27. Nelson dit :

    Bonjour,
    tout d’abord merci pour cette class fort pratique.

    Par contre j’ai mis un peu le nez dedans, et j’ai du mal a tout comprendre…

    je te pose donc une question : dans le meme genre, sans s’identifier est-il possible de recuperer le nom et le status (Online Offline) d’un contact msn juste avec le mail ?
    Car j’ai trouver des solution mais en java ou C donc non utilisable sur un site web.

    Je te remercie d’avance si tu me lance quelques pistes,

    Sinon je confirme ca marche toujours sur gmail et msn.

    Merci
    Bye ;)

  28. sahid dit :

    Salut Nelson,

    Comme ça je ne peux pas te dire, mais si tu as trouvé en C ou Java tu devrais pourvoir le faire en PHP.

    jete un oeil sur la doc du protocoles,
    ensuite avec curl c assez simple d’envoyer les trames :)

    http://www.hypothetic.org/docs/msn/index.php

  29. Kastor dit :

    Pour le probleme de session avec gmail, il suffit de remplacer

    dans le fichier importGmail.class.php par

    1. unset($_SESSION[‘LIBGMAILER’]);
  30. arthak dit :

    Test passé sur @msn.com !

  31. Sun Location vacances dit :

    Merci pour ce script. C’est très intéressant de pouvoir récupérer des adresses msn via PHP. Je ne pensais pas que cette fonctionnalité été possible

  32. Destiny dit :

    Salut Sahid,

    je commence par te féliciter pour ce programme très pratique. J’ai un problème, avec hotmail le script fonctionne. mais avec yahoo il m’affiche Array ()

  33. ruelle dit :

    Bonjour,

    A chaque fois que je fais un essai sur hotmail.fr ou hotmail.com, la liste des contacts est vide, est ce normal ?

  34. kingNothing dit :

    salut et felicitation c un code trop cool
    mais j’ai un soucis avec GMAIL
    tjs il m’affiche Array()
    pourtant ici il m’affiche mes contactes?

  35. bab dit :

    Salut ,

    merci pour le code, par contre il y a un problème même dans ton site, il retourne le mail dans la variable name pour yahoo.com.

    Comment peux ton régler cela?

    merci

  36. Mick dit :

    Il me semble que le Gmail ne fonctionne plus, pouvez vous vérifier thx.

Tu peux laisser un commentaire pour Récuperer ses contacts MSN, Gmail, Yahoo avec PHP