29.5. Zend_Service_Delicious

29.5.1. Introduction

Zend_Service_Delicious est une API pour accèder aux web services XML et JSON de del.icio.us. Ce composant vous donne, si vous avez les droits, un accès en lecture-écriture à vos entrées sur del.icio.us. Il permet également un accès en lecture seul aux données de tous les utilisateurs.

Exemple 29.13. Récupérer toutes vos entrées

<?php
$delicious = new Zend_Service_Delicious('nom d utilisateur', 'mot de passe');
$posts = $delicious->getAllPosts();

foreach ($posts as $post) {
    echo "--\n";
    echo "Titre: {$post->getTitle()}\n";
    echo "Url: {$post->getUrl()}\n";
}
?>

29.5.2. Récupérer vos entrées

Zend_Service_Delicious fournis 3 méthodes pour récupérer vos entrées: getPosts(), getRecentPosts() and getAllPosts(). Elles retournent toutes une instance de la classe Zend_Service_Delicious_PostList, qui contient toutes les entrées récupérées.

<?php
/**
 * Récupère les entrées correspondants aux arguments. Si la date ou l'url n'est pas précisée, la date la plus écente
 * sera prise en compte.
 *
 * @param string $tag Optionnel pour filtrer par tag
 * @param Zend_Date $dt Optionnel pour filtrer par date
 * @param string $url Optionnel pour filtrer par url
 * @return Zend_Service_Delicious_PostList
 */
public function getPosts($tag = null, $dt = null, $url = null);

/**
 * Récupère les dernières entrées
 *
 * @param string $tag Optionnel pour filtrer par tag
 * @param string $count Nombre maximum d'entrées à récupérer ( 15 par défault)
 * @return Zend_Service_Delicious_PostList
 */
public function getRecentPosts($tag = null, $count = 15);

/**
 * Récupère toutes les entrées
 *
 * @param string $tag Optionnel pour filtrer par tag
 * @return Zend_Service_Delicious_PostList
 */
public function getAllPosts($tag = null);
?>

29.5.3. Zend_Service_Delicious_PostList

Cette facilite l'accès au données en implémentant les interfaces Countable, Iterator, etArrayAccess interfaces.

Exemple 29.14. Accèder à la liste des entrées

<?php
$delicious = new Zend_Service_Delicious('nom d utilisateur', 'mot de passe');
$posts = $delicious->getAllPosts();

// Affiche le nombre d'entrées
echo count($posts);

// Itération sur les entrées
foreach ($posts as $post) {
    echo "--\n";
    echo "Titre: {$post->getTitle()}\n";
    echo "Url: {$post->getUrl()}\n";
}

// Affiche une entrée en utilisant un tableau
echo $posts[0]->getTitle();
?>
[Note] Note

Dans cette implémentation les méthodes ArrayAccess::offsetSet() et ArrayAccess::offsetUnset() lèvent des exceptions. Ainsi, du code tel que unset($posts[0]); ou $posts[0] = 'A'; lévera une exception car ces propriétés sont en lecture seule.

29.5.4. Edition des entrées

Exemple 29.15. Edition d'une entrée

<?php
$delicious = new Zend_Service_Delicious('nom d utilisateur', 'mot de passe');
$posts = $delicious->getPosts();

// change le titre
$posts[0]->setTitle('Nouveau Titre');
// saubegarde le changement
$posts[0]->save();
?>

Exemple 29.16. Method call chaining

Toutes les méthodes "setter" renvois l'objet Zend_Service_Delicious_PostList vous pouvez donc chainer les appels aux méthodes en utilisant l'interface "fluent"

<?php
$delicious = new Zend_Service_Delicious('nom d utilisateur', 'mot de passe');
$posts = $delicious->getPosts();

$posts[0]->setTitle('Nouveau Titre')
         ->setNotes('Nouvelle note')
         ->save();
?>

29.5.5. Supprimer des entrées

Il y'as de moyens de supprimer une entrée, en sépcifiant son URL ou en appelant la méthode delete() sur un objet Zend_Service_Delicious_PostList

Exemple 29.17. Suppression d'une entrée

<?php
$delicious = new Zend_Service_Delicious('nom d utilisateur', 'mot de passe');

// en spécifiant l' URL
$delicious->deletePost('http://framework.zend.com');

// en appelant la méthode de l'objet Zend_Service_Delicious_PostList
$posts = $delicious->getPosts();
$posts[0]->delete();

// une autre façon d'utiliser deletePost()
$delicious->deletePost($posts[0]->getUrl());
?>

29.5.6. Ajout d'entrées

Pour ajouter une entrée vous devez appeler la méthode createNewPost(), qui renvois un objet Zend_Service_Delicious_Post. Quand vous éditez l'entrée, vous devez la sauvegarder dans la base de donnée de del.icio.us en appelant la méthode save().

Exemple 29.18. Ajouter une entrée

<?php
$delicious = new Zend_Service_Delicious('nom d utilisateur', 'mot de passe');

// créé et sauvegarde une nouvelle entrée (en chainant les méthodes)
$delicious->createNewPost('Zend Framework', 'http://framework.zend.com')
          ->setNotes('Page d\'accueil du Zend Framewore')
          ->save();

// créé et sauvegarde une nouvelle entrée (sans chainer les méthodes)
$newPost = $delicious->createNewPost('Zend Framework', 'http://framework.zend.com');
$newPost->setNotes('Page d\'accueil du Zend Framewore');
$newPost->save();
?>

29.5.7. Les Tags

Exemple 29.19. Récupérer les Tags

<?php
$delicious = new Zend_Service_Delicious('nom d utilisateur', 'mot de passe');

// récupère tous les Tags
print_r($delicious->getTags());

// renomme le tag "ZF" en "zendFramework"
$delicious->renameTag('ZF', 'zendFramework');
?>

29.5.8. Les groupes de Tags

Exemple 29.20. Gestion des groupes de Tags

<?php
$delicious = new Zend_Service_Delicious('nom d utilisateur', 'mot de passe');

// get all bundles
print_r($delicious->getBundles());

// delete bundle someBundle
$delicious->deleteBundle('someBundle');

// add bundle
$delicious->addBundle('newBundle', array('tag1', 'tag2'));
?>

29.5.9. Données publiques

L'API web del.icio.us autorise l'accès aux données publiques de tous les utilisateurs.

Tableau 29.10. Méthodes pour récuprer les données publiques

Nom Description Type de retour
getUserFans() Récupère les fans d'un utilisateur Array
getUserNetwork() Récupère le réseau d'un utilisateur Array
getUserPosts() Récupère les entrées d'un utilisateur Zend_Service_Delicious_PostList
getUserTags() Récupère les Tags d'un utilisateur Array
[Note] Note

Si vous utilisez uniquement ces méthodes, le nom d'utilisateur et le mot de passe ne sont pas obligatoires pour créer un nouvel objet Zend_Service_Delicious.

Exemple 29.21. Récupérer les données publiques

<?php
// nom d'utilisateur et mot de passe optionnels
$delicious = new Zend_Service_Delicious();

// récupère les fans de l'utilisateur someUser
print_r($delicious->getUserFans('someUser'));

// récupère le réseau de l'utilisateur someUser
print_r($delicious->getUserNetwork('someUser'));

// récupère les Tags de l'utilisateur someUser
print_r($delicious->getUserTags('someUser'));
?>

29.5.9.1. Entrées publiques

Quand vous récupérez des entrées publiques, la méthode getUserPosts() retourne un objet Zend_Service_Delicious_PostList qui contient des objets Zend_Service_Delicious_SimplePost. Ces derniers contiennents des informations basiques sur l'entrées : URL, title, notes, and tags.

Tableau 29.11. Méthodes de la classe Zend_Service_Delicious_SimplePost

Nom Description Type de retour
getNotes() Récupère les notes de l'entrée String
getTags() Récupère les Tags de l'entrés Array
getTitle() Récupère le titre de l'entrée String
getUrl() Récupère l'URL de l'entrée String

29.5.10. Client HTTP

Zend_Service_Delicious utilise Zend_Rest_Client pour effectuer les requêtes HTTP sur le web service de del.icio.us. Pour modifier le client HTTP utiliser par Zend_Service_Delicious, vous devez modifier le client HTTP de Zend_Rest_Client.

Exemple 29.22. Modifier le client HTTP de Zend_Rest_Client

<?php
$myHttpClient = new My_Http_Client();
Zend_Rest_Client::setHttpClient($myHttpClient);
?>

Quand vous effectuez plus d'une requête avec Zend_Service_Delicious vous pouvez accèlérez vos requêtes en configurant votre client HTTP pour qu'il ne termine pas les connections.

Exemple 29.23. Configurer votre client HTTP pour qu'il ne termine pas les connections

<?php
Zend_Rest_Client::getHttpClient()->setConfig(array(
        'keepalive' => true
));
?>
[Note] Note

En raison de quelques problémes de del.icio.us avec 'ssl2' (environs 2 secondes pour une requête), quand un objet Zend_Service_Delicious est construit, le transport SSL de Zend_Rest_Client est configuré sur 'ssl' au lieu de la valeur par défaut 'ssl2'.