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";
}
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);
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();
![]() |
Nota |
|---|---|
Los métodos |
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";
}
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();
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());
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();
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');
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'));
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 |
![]() |
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 |
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'));
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 |
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
));
![]() |
Nota |
|---|---|
Cuando se construye un objeto |
![[Note]](images/note.png)