ZendService\Delicious¶
Introduction¶
ZendService\Delicious\Delicious is simple API for using del.icio.us XML and JSON web services. This component gives you read-write access to posts at del.icio.us if you provide credentials. It also allows read-only access to public data of all users.
Get all posts
1 2 3 4 5 6 7 8 | $delicious = new ZendService\Delicious\Delicious('username', 'password');
$posts = $delicious->getAllPosts();
foreach ($posts as $post) {
echo "--\n";
echo "Title: {$post->getTitle()}\n";
echo "Url: {$post->getUrl()}\n";
}
|
Retrieving posts¶
ZendService\Delicious\Delicious provides three methods for retrieving posts: getPosts(), getRecentPosts() and getAllPosts(). All of these methods return an instance of ZendService\Delicious\PostList, which holds all retrieved posts.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | /**
* 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 DateTime $dt Optional filtering by date
* @param string $url Optional filtering by url
* @return ZendService\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 ZendService\Delicious\PostList
*/
public function getRecentPosts($tag = null, $count = 15);
/**
* Get all posts
*
* @param string $tag Optional filtering by tag
* @return ZendService\Delicious\PostList
*/
public function getAllPosts($tag = null);
|
ZendService\Delicious\PostList¶
Instances of this class are returned by the getPosts(), getAllPosts(), getRecentPosts(), and getUserPosts() methods of ZendService\Delicious\Delicious.
For easier data access this class implements the Countable, Iterator, and ArrayAccess interfaces.
Accessing post lists
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $delicious = new ZendService\Delicious\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
The ArrayAccess::offsetSet() and ArrayAccess::offsetUnset() methods throw exceptions in this implementation. Thus, code like unset($posts[0]); and $posts[0] = ‘A’; will throw exceptions because these properties are read-only.
Post list objects have two built-in filtering capabilities. Post lists may be filtered by tags and by URL.
Filtering a Post List with Specific Tags
Posts may be filtered by specific tags using withTags(). As a convenience, withTag() is also provided for when only a single tag needs to be specified.
1 2 3 4 5 6 7 8 | $delicious = new ZendService\Delicious\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";
}
|
Filtering a Post List by URL
Posts may be filtered by URL matching a specified regular expression using the withUrl() method:
1 2 3 4 5 6 7 8 | $delicious = new ZendService\Delicious\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";
}
|
Editing posts¶
Post editing
1 2 3 4 5 6 7 | $delicious = new ZendService\Delicious\Delicious('username', 'password');
$posts = $delicious->getPosts();
// set title
$posts[0]->setTitle('New title');
// save changes
$posts[0]->save();
|
Method call chaining
Every setter method returns the post object so that you can chain method calls using a fluent interface.
1 2 3 4 5 6 | $delicious = new ZendService\Delicious\Delicious('username', 'password');
$posts = $delicious->getPosts();
$posts[0]->setTitle('New title')
->setNotes('New notes')
->save();
|
Deleting posts¶
There are two ways to delete a post, by specifying the post URL or by calling the delete() method upon a post object.
Deleting posts
1 2 3 4 5 6 7 8 9 10 11 | $delicious = new ZendService\Delicious\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());
|
Adding new posts¶
To add a post you first need to call the createNewPost() method, which returns a ZendService\Delicious\Post object. When you edit the post, you need to save it to the del.icio.us database by calling the save() method.
Adding a post
1 2 3 4 5 6 7 8 9 10 11 12 | $delicious = new ZendService\Delicious\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();
|
Tags¶
Tags
1 2 3 4 5 6 7 | $delicious = new ZendService\Delicious\Delicious('username', 'password');
// get all tags
print_r($delicious->getTags());
// rename tag ZF to zendFramework
$delicious->renameTag('ZF', 'zendFramework');
|
Bundles¶
Bundles
1 2 3 4 5 6 7 8 9 10 | $delicious = new ZendService\Delicious\Delicious('username', 'password');
// get all bundles
print_r($delicious->getBundles());
// delete bundle someBundle
$delicious->deleteBundle('someBundle');
// add bundle
$delicious->addBundle('newBundle', array('tag1', 'tag2'));
|
Public data¶
The del.icio.us web API allows access to the public data of all users.
Name | Description | Return type |
---|---|---|
getUserFans() | Retrieves fans of a user | Array |
getUserNetwork() | Retrieves network of a user | Array |
getUserPosts() | Retrieves posts of a user | ZendServiceDeliciousPostList |
getUserTags() | Retrieves tags of a user | Array |
Note
When using only these methods, a username and password combination is not required when constructing a new ZendService\Delicious\Delicious object.
Retrieving public data
1 2 3 4 5 6 7 8 9 10 11 | // username and password are not required
$delicious = new ZendService\Delicious\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'));
|
Public posts¶
When retrieving public posts with the getUserPosts() method, a ZendService\Delicious\PostList object is returned, and it contains ZendService\Delicious\SimplePost objects, which contain basic information about the posts, including URL, title, notes, and tags.
Name | Description | Return type |
---|---|---|
getNotes() | Returns notes of a post | String |
getTags() | Returns tags of a post | Array |
getTitle() | Returns title of a post | String |
getUrl() | Returns URL of a post | String |
HTTP client¶
ZendService\Delicious\Delicious uses Zend\Rest\Client for making HTTP requests to the del.icio.us web service. To change which HTTP client ZendService\Delicious\Delicious uses, you need to change the HTTP client of Zend\Rest\Client.
Changing the HTTP client of ZendRestClient
1 2 | $myHttpClient = new My_Http_Client();
Zend\Rest\Client::setHttpClient($myHttpClient);
|
When you are making more than one request with ZendService\Delicious\Delicious to speed your requests, it’s better to configure your HTTP client to keep connections alive.
Configuring your HTTP client to keep connections alive
1 2 3 | Zend\Rest\Client::getHttpClient()->setConfig(array(
'keepalive' => true
));
|
Note
When a ZendService\Delicious\Delicious object is constructed, the SSL transport of Zend\Rest\Client is set to ‘ssl’ rather than the default of ‘ssl2’. This is because del.icio.us has some problems with ‘ssl2’, such as requests taking a long time to complete (around 2 seconds).