TigerZF
🌐Español

64.18. Zend_Service_Delicious

64.18.1. Introducción

Zend_Service_Delicious es una API sencilla para utilizar los servicios web XML y JSON de del.icio.us. Este componente le proporciona acceso de lectura y escritura a las entradas de del.icio.us si proporciona credenciales. También permite el acceso de solo lectura a los datos públicos de todos los usuarios.

Ejemplo 64.80. Obtener todas las entradas

$delicious = new Zend_Service_Delicious('username', 'password');
$posts = $delicious->getAllPosts();

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

64.18.2. Obtener entradas

Zend_Service_Delicious proporciona tres métodos para obtener entradas: getPosts(), getRecentPosts() y getAllPosts(). Todos estos métodos devuelven una instancia de Zend_Service_Delicious_PostList, que contiene todas las entradas obtenidas.

/**
 * Get posts matching the arguments. If no date or url is given,
 * most recent date will be used.
 *
 * @param string $tag Optional filtering by tag
 * @param Zend_Date $dt Optional filtering by date
 * @param string $url Optional filtering by url
 * @return Zend_Service_Delicious_PostList
 */
public function getPosts($tag = null, $dt = null, $url = null);

/**
 * Get recent posts
 *
 * @param string $tag   Optional filtering by tag
 * @param string $count Maximal number of posts to be returned
 *                      (default 15)
 * @return Zend_Service_Delicious_PostList
 */
public function getRecentPosts($tag = null, $count = 15);

/**
 * Get all posts
 *
 * @param string $tag Optional filtering by tag
 * @return Zend_Service_Delicious_PostList
 */
public function getAllPosts($tag = null);

64.18.3. Zend_Service_Delicious_PostList

Los métodos getPosts(), getAllPosts(), getRecentPosts() y getUserPosts() de Zend_Service_Delicious devuelven instancias de esta clase.

Para facilitar el acceso a los datos, esta clase implementa las interfaces Countable, Iterator y ArrayAccess.

Ejemplo 64.81. Acceder a listas de entradas

$delicious = new Zend_Service_Delicious('username', 'password');
$posts = $delicious->getAllPosts();

// count posts
echo count($posts);

// iterate over posts
foreach ($posts as $post) {
    echo "--\n";
    echo "Title: {$post->getTitle()}\n";
    echo "Url: {$post->getUrl()}\n";
}

// get post using array access
echo $posts[0]->getTitle();

[Note] Nota

Los métodos ArrayAccess::offsetSet() y ArrayAccess::offsetUnset() lanzan excepciones en esta implementación. Por lo tanto, un código como unset($posts[0]); y $posts[0] = 'A'; lanzará excepciones porque estas propiedades son de solo lectura.

Los objetos de lista de entradas tienen dos capacidades de filtrado integradas. Las listas de entradas pueden filtrarse por etiquetas y por URL.

Ejemplo 64.82. Filtrar una lista de entradas con etiquetas específicas

Las entradas pueden filtrarse por etiquetas específicas usando withTags(). Como comodidad, también se proporciona withTag() para cuando solo se necesite especificar una única etiqueta.

$delicious = new Zend_Service_Delicious('username', 'password');
$posts = $delicious->getAllPosts();

// Print posts having "php" and "zend" tags
foreach ($posts->withTags(array('php', 'zend')) as $post) {
    echo "Title: {$post->getTitle()}\n";
    echo "Url: {$post->getUrl()}\n";
}

Ejemplo 64.83. Filtrar una lista de entradas por URL

Las entradas pueden filtrarse por URL haciendo coincidir una expresión regular especificada mediante el método withUrl():

$delicious = new Zend_Service_Delicious('username', 'password');
$posts = $delicious->getAllPosts();

// Print posts having "help" in the URL
foreach ($posts->withUrl('/help/') as $post) {
    echo "Title: {$post->getTitle()}\n";
    echo "Url: {$post->getUrl()}\n";
}

64.18.4. Editar entradas

Ejemplo 64.84. Edición de una entrada

$delicious = new Zend_Service_Delicious('username', 'password');
$posts = $delicious->getPosts();

// set title
$posts[0]->setTitle('New title');
// save changes
$posts[0]->save();

Ejemplo 64.85. Encadenamiento de llamadas a métodos

Cada método setter devuelve el objeto de la entrada, de modo que puede encadenar llamadas a métodos usando una interfaz fluida.

$delicious = new Zend_Service_Delicious('username', 'password');
$posts = $delicious->getPosts();

$posts[0]->setTitle('New title')
         ->setNotes('New notes')
         ->save();

64.18.5. Eliminar entradas

Hay dos formas de eliminar una entrada: especificando la URL de la entrada o llamando al método delete() sobre un objeto de entrada.

Ejemplo 64.86. Eliminar entradas

$delicious = new Zend_Service_Delicious('username', 'password');

// by specifying URL
$delicious->deletePost('http://framework.zend.com');

// or by calling the method upon a post object
$posts = $delicious->getPosts();
$posts[0]->delete();

// another way of using deletePost()
$delicious->deletePost($posts[0]->getUrl());

64.18.6. Agregar nuevas entradas

Para agregar una entrada, primero debe llamar al método createNewPost(), que devuelve un objeto Zend_Service_Delicious_Post. Cuando edite la entrada, deberá guardarla en la base de datos de del.icio.us llamando al método save().

Ejemplo 64.87. Agregar una entrada

$delicious = new Zend_Service_Delicious('username', 'password');

// create a new post and save it (with method call chaining)
$delicious->createNewPost('Zend Framework', 'http://framework.zend.com')
          ->setNotes('Zend Framework Homepage')
          ->save();

// create a new post and save it  (without method call chaining)
$newPost = $delicious->createNewPost('Zend Framework',
                                     'http://framework.zend.com');
$newPost->setNotes('Zend Framework Homepage');
$newPost->save();

64.18.7. Etiquetas

Ejemplo 64.88. Etiquetas

$delicious = new Zend_Service_Delicious('username', 'password');

// get all tags
print_r($delicious->getTags());

// rename tag ZF to zendFramework
$delicious->renameTag('ZF', 'zendFramework');

64.18.8. Paquetes

Ejemplo 64.89. Paquetes

$delicious = new Zend_Service_Delicious('username', 'password');

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

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

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

64.18.9. Datos públicos

La API web de del.icio.us permite acceder a los datos públicos de todos los usuarios.

Tabla 64.14. Métodos para obtener datos públicos

Nombre Descripción Tipo de retorno
getUserFans() Obtiene los seguidores de un usuario Array
getUserNetwork() Obtiene la red de un usuario Array
getUserPosts() Obtiene las entradas de un usuario Zend_Service_Delicious_PostList
getUserTags() Obtiene las etiquetas de un usuario Array

[Note] Nota

Cuando solo se utilizan estos métodos, no se requiere una combinación de nombre de usuario y contraseña al construir un nuevo objeto Zend_Service_Delicious.

Ejemplo 64.90. Obtener datos públicos

// username and password are not required
$delicious = new Zend_Service_Delicious();

// get fans of user someUser
print_r($delicious->getUserFans('someUser'));

// get network of user someUser
print_r($delicious->getUserNetwork('someUser'));

// get tags of user someUser
print_r($delicious->getUserTags('someUser'));

64.18.9.1. Entradas públicas

Al obtener entradas públicas con el método getUserPosts(), se devuelve un objeto Zend_Service_Delicious_PostList, que contiene objetos Zend_Service_Delicious_SimplePost, los cuales contienen información básica sobre las entradas, incluyendo URL, título, notas y etiquetas.

Tabla 64.15. Métodos de la clase Zend_Service_Delicious_SimplePost

Nombre Descripción Tipo de retorno
getNotes() Devuelve las notas de una entrada String
getTags() Devuelve las etiquetas de una entrada Array
getTitle() Devuelve el título de una entrada String
getUrl() Devuelve la URL de una entrada String

64.18.10. Cliente HTTP

Zend_Service_Delicious utiliza Zend_Rest_Client para realizar solicitudes HTTP al servicio web de del.icio.us. Para cambiar qué cliente HTTP utiliza Zend_Service_Delicious, necesita cambiar el cliente HTTP de Zend_Rest_Client.

Ejemplo 64.91. Cambiar el cliente HTTP de Zend_Rest_Client

$myHttpClient = new My_Http_Client();
Zend_Rest_Client::setHttpClient($myHttpClient);

Cuando realiza más de una solicitud con Zend_Service_Delicious para acelerar sus solicitudes, es mejor configurar su cliente HTTP para mantener las conexiones activas.

Ejemplo 64.92. Configurar el cliente HTTP para mantener las conexiones activas

Zend_Rest_Client::getHttpClient()->setConfig(array(
        'keepalive' => true
));

[Note] Nota

Cuando se construye un objeto Zend_Service_Delicious, el transporte SSL de Zend_Rest_Client se establece en 'ssl' en lugar del valor predeterminado 'ssl2'. Esto se debe a que del.icio.us tiene algunos problemas con 'ssl2', como que las solicitudes tarden mucho tiempo en completarse (alrededor de 2 segundos).