Web APIs by Example, Part II: del.icio.us
Today we’ll be looking at applying what we’ve already learned from working with the Twitter API to the social bookmarking site del.icio.us. As you might expect, the del.icio.us API offers a much broader set of functionality for interacting with it’s data. Besides being able to add bookmarks, you can delete existing ones and use a number of different methods to selectively filter your bookmarks and return just the ones you’re looking for. It’s quite nice, and today we’ll be exposing some of these features with an app that lets us add bookmarks as well as filter our most recent ones.
$delicious_username = 'YOUR_USERNAME_HERE';
$delicious_password = 'YOUR_PASSWORD_HERE';
$errno = 0;
$errstr = '';
$response = '';
$links = array();
function httpRequest($host, $path = '/', $method = 'GET') {
global $errno, $errstr, $response;
global $delicious_username, $delicious_password;
$port = 80;
if(substr($host, 0, 6) == 'ssl://') $port = 443;
$sock = @fsockopen($host, $port, $errno, $errstr, 30);
if (!$sock) {
if(!$errno) {
die("<p>fsockopen() error:<br />Unable to open socket for undefined reason; most likely the version of PHP you're running doesn't have SSL support compiled.");
} else {
die("<p>fsockopen() error:<br />$errstr ($errno)</p>");
}
} else {
$host = substr($host, 6);
$header = "$method $path HTTP/1.0rn";
$header .= "Host: $hostrn";
$header .= "Accept-Encoding: nonern";
$header .= "Authorization: Basic " . base64_encode("{$delicious_username}:{$delicious_password}") . "rn";
$header .= "Connection: Closernrn";
fwrite($sock, $header);
while (!feof($sock)) {
$response .= fgets($sock, 128);
}
fclose($sock);
$response = str_replace("r", '', $response);
$response = trim(substr($response, strpos($response, "nn")));
return true;
}
}
if(isset($_POST['url']) && isset($_POST['description'])) {
// Bookmark a URL
$url = urlencode(trim($_POST['url']));
$description = urlencode(trim($_POST['description']));
httpRequest('ssl://api.del.icio.us', '/v1/posts/add?url=' . $url . '&description=' . $description);
}
// Fetch our recent bookmarks:
$count = 10;
$tag = '';
if(isset($_GET['count']) && strlen($_GET['count']) && is_numeric($_GET['count'])) $count = trim($_GET['count']);
if(isset($_GET['tag']) && strlen($_GET['tag'])) $tag = urlencode(trim($_GET['tag']));
$ret = httpRequest('ssl://api.del.icio.us', '/v1/posts/recent?count=' . $count . '&tag=' . $tag);
if($ret) {
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
xml_set_element_handler($xml_parser, 'parsePostOpen', 'parsePostClose');
xml_parse($xml_parser, $response, true);
}
function parsePostClose($parser, $name){}
function parsePostOpen($parser, $name, $attrs)
{
if(isset($attrs['HREF'])) {
$attrs['TIME'] = strtotime(substr($attrs['TIME'], 0, -1));
$attrs['TAG'] = explode(' ', trim($attrs['TAG']));
global $links;
$links[] = $attrs;
}
}
?>
<html>
<head>
<title>del.icio.us Bookmarks Example</title>
</head>
<body>
<h1>My Recent Bookmarks</h1>
<form method="get">
<fieldset>
<legend>Filter Results</legend>
Display the
<select id="count" name="count">
<option >10</option>
<option >50</option>
<option >100</option>
</select>
most recent bookmarks,
tagged with <input type="text" id="tag" name="tag" value="" /> <input type="submit" value="Refresh" />
</fieldset>
</form>
<ul>
</ul>
<form method="post">
<fieldset>
<legend>New Bookmark</legend>
<label for="url">URL:</label><br />
<input type="text" id="url" name="url" /><br />
<label for="description">Description:</label><br />
<input type="text" id="description" name="description" /> <input type="submit" value="Add Bookmark" />
</fieldset>
</form>
</body>
</html>
That’s it! If everything’s gone right, you’ve got yourself a pretty slick little bookmark manager for del.icio.us. Hope you enjoyed this article, and please feel free to comment with any questions or additions. I have a few more additions planned to the series, so stay tuned.
I am currently available for contract work! I have over a decade of experience in building appealing, standards-based web designs and applications. Check out
RSS Feed
Email Updates
Add New Comment
Viewing 1 Comment
Thanks. Your comment is awaiting approval by a moderator.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Add New Comment
Trackbacks
(Trackback URL)
August 6, 2007 at 6:44 pm
[...] Web APIs by Example, Part II: del.icio.us - Evan Sims (tags: api apis design delicious php mashup programming webapp ...
August 7, 2007 at 6:44 am
[...] Web APIs by Example, Part II: del.icio.us Another example of extracting del.icio.us tags through their API. Like my sidebar ...