Il y a très peu de temps Yahoo a lui aussi sortie son API permettant de récupérer les contacts des utilisateurs de manière sécurisée : Yahoo! Address Book API.
Nous verrons donc comment utiliser cette API avec notre ami PHP 5.
A la différence des autres API, Yahoo! a la gentillesse de nous proposer une classe PHP5 facilitant l’utilisation de BBAuth (Browser-Based Authentification). Nous aurons juste à utiliser la classe de BBAuth et l’adapter un petit peu.
Enregistrement de votre clé d’API Comme d’habitude, il vous faudra enregistrer votre application auprès de Yahoo! pour pouvoir utiliser l’API : Developer Registration.
Une autre différence entre cette API et les autres : dans celle-ci vous devez définir l’URL de retour à la définition de la clé API et vous ne pouvez donc pas la passer en paramètre. De plus, il est pour le moment impossible de définir une URL en HTTPS dans l’adresse de retour. A suivre…
Récupération de la classe fournie par Yahoo! Pour cela, téléchargez le Quickstart package et ne gardez que ybrowserauth.class.php5. Cette classe doit être incluse pour chaque code source qui va suivre.
Création de l’URL : cette fois ci, la classe fournie par Yahoo! s’occupe de tout, vous n’avez qu’à utiliser le code suivant :
$foo = 'quelque_chose_qui_me_sera_renvoyé';
$bbauth = new YBBauthWebServices('mon_app_id', 'mon_secret');
echo $bbauth->getAuthURL($foo, true);
Récupération des contacts : Vous devez juste créer un fichier correspondant à l’URL défini avec votre clé d’API et utiliser le code suivant :
function isEmail($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL);
}
function email2nickname($email) {
$output = str_replace(array('.', '-', '_', ',', ':'), ' ', substr($email, 0, strpos($email, '@')));
$output = str_replace(array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), '', $output);
$output = ucwords($output);
return $output;
}
function grabYahooContacts($token) {
$bbauth = new YBBauthREST('mon-app-id', 'mon-secret');
if ($bbauth->validate_sig()) {
$result = json_decode($bbauth->makeAuthWSgetCall('http://address.yahooapis.com/v1/searchContacts?format=json'), true);
} else {
return false;
}
$grab = array();
$grab['user'] = array(
'name'=>null,
'email'=>null,
'token'=>$bbauth->userhash
);
$grab['contacts'] = array();
foreach ($result['contacts'] as $entry) {
$contact = array('name'=>null, 'email'=>null);
if(isset($entry['type']) and 'contact' === $entry['type']) {
foreach ($entry['fields'] as $field) {
if('name' === $field['type']) {
if(isset($field['first'])) { $contact['name'] = $field['first']; }
if(isset($field['middle'])) { $contact['name'] = trim($contact['name']).' '.$field['first']; }
if(isset($field['last'])) { $contact['name'] = trim($contact['name']).' '.$field['last']; }
$contact['name'] = trim($contact['name']);
}
elseif ('mobile' === $field['type']) {
if(isset($field['phone'])) { $contact['mobile'] = $field['phone']; }
}
elseif ('email' === $field['type']) {
if(isset($field['data'])) { $contact['email'] = $field['data']; }
}
}
if(isEmail($contact['name']) or (empty($contact['name']) and !empty($contact['email']))) {
$contact['name'] = email2nickname($contact['email']);
}
if(!empty($contact['name']) and (!empty($contact['email']) or !empty($contact['mobile']))) {
$grab['contacts'][] = $contact;
}
}
}
return $grab;
}
if(isset($_GET['appdata']) and isset($_GET['token'])) {
$grab = grabYahooContacts($_GET['token']);
print_r($grab);
}
Encore une fois, n’oubliez pas d’ajouter le traitement d’erreurs propre à votre application.
