Evan Sims

Evan is a 25 year old designer, programmer and college student from the cornfields of Illinois. Aside from being a freelance web developer, he is also an aspiring video game designer. Learn more.

Free for Job 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 my resume on LinkedIn, my list of ongoing projects and if you feel like we might be a good fit, drop me a line.

Add to Technorati Favorites

August 3rd, 2007
Tips

Tags:


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="" /> &nbsp; <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.

Download the Source Code

 

Trackbacks

(Trackback URL)

  • links for 2007-08-07 « Simply… A User

    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 ...

  • All in a days work…

    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 ...

close Reblog this comment
blog comments powered by Disqus

© 2000-2008 Evan Sims. Content redistributable under terms. Hosted by (mt) Media Temple. Powered by Wordpress. Fueled by ramen.