Dec 18, 2005

del.icio.us API にチャレンジ

del.icio.us API とは

ソーシャル・ブックマークサービスの del.icio.us が公開している API。 ブックマークの登録、削除などの操作ができる。 方式は Yahoo! 同様 REST を採用している。

del.icio.us
http://del.icio.us/
del.icio.us - Reference
http://del.icio.us/help/api/

試してみる

試してみた。

  1. 最初に del.icio.us トップ から del.icio.us のアカウント登録を行う。
  2. リクエスト用の URL を作成する。
  3. 早速リクエストを送ってみる。リクエスト URL 実行時に BASIC 認証によるログインが要求されるので 1 で登録したアカウントで認証を行う。

ブックマークの登録

http://del.icio.us/api/posts/add?url=http://www.in-vitro.jp/blog/index.cgi/index.rss&description=in-vitro.jp
<?xml version='1.0' standalone='yes'?>
<result code="done" />

ブックマークの取得

http://del.icio.us/api/posts/get?
<?xml version='1.0' standalone='yes'?>
<posts dt="2005-12-16" tag="" user="invitro.jp">
  <post href="http://www.in-vitro.jp/blog/index.cgi/index.rss" 
           description="in-vitro.jp" 
           hash="e885a76a691ce90ff1626c1bd5c41a26" 
           others="1" 
           tag="system:unfiled" 
           time="2005-12-17T14:44:59Z" />
</posts>

ブックマーク先 URL の取得指示

http://del.icio.us/api/posts/update
<?xml version='1.0' standalone='yes'?>
<update time="2005-12-17T14:54:38Z" />

ブックマークの削除

http://del.icio.us/api/posts/delete?url=http://www.in-vitro.jp/blog/index.cgi/index.rss
<?xml version='1.0' standalone='yes'?>
<result code="done" />

del.icio.us 呼び出し用 HTML

Google Web APIs (beta) にチャレンジ で使用した HTML を BASIC 認証に対応させて使用した。

<html>
<head>
<script>
<!--
  var req;

  function sendRequest() {
    var url = document.myform.url.value;
    var param = document.myform.request.value;
    var username = document.myform.username.value;
    var password = document.myform.password.value;

    req = prepareXMLHttpRequest();
    if (req == null) {
      alert('XMLHttpRequest is not supported');
      return;
    }

    var encodedParam = '';
    var splitParam = param.split('&');
    for(i = 0; i < splitParam.length; i++) {
      var tmp = splitParam[i].split('=');
      encodedParam += '&' + encodeURIComponent(tmp[0]) + '=' + encodeURIComponent(tmp[1]);
    }

    req.onreadystatechange = showResponse;
    if(username != null && password != null) {
      req.open("POST", url, true, username, password);
    } else {
      req.open("POST", url, true);
    }
    req.setRequestHeader("Content-Type" , "text/xml");
    req.send(encodedParam);
  }

  function showResponse() {
    if (req.readyState == 4) {
      if (req.status == 200) {
        document.myform.response.value = req.responseText;
      } else {
        document.myform.response.value = 'FAILURE!! ' + req.status + ':' + req.statusText;
      }
    }
  }

  function prepareXMLHttpRequest() {
    if (window.XMLHttpRequest) {
      return new XMLHttpRequest();
    } else if (window.ActiveXObject) {
      return new ActiveXObject("Microsoft.XMLHTTP");
    }
    return null;
  }
//-->
</script>
</head>

<body>
  <form name="myform">
    <input type="button" value="POST!!" onclick="sendRequest();"><br>
    <br>
    URL: <input type="text" name="url" size="100"> <span style="font-size: xx-small;">[REQUIRED]</span><br>
    USERNAME: <input type="text" name="username" size="30"> <span style="font-size: xx-small;">[OPTIONAL]</span><br>
    PASSWORD: <input type="text" name="password" size="30"> <span style="font-size: xx-small;">[OPTIONAL]</span><br>
    <br>
    REQUEST: <span style="font-size: xx-small;">[OPTIONAL]</span><br>
    <textarea name="request" cols="100" rows="25"></textarea><br>
    <br>
    RESPONSE:<br>
    <textarea name="response" cols="100" rows="25"></textarea>
  </form>
</body>
</html>

TrackBack ping me at
http://www.in-vitro.jp/blog/index.cgi/WebService/20051218_01.trackback
Post a comment

writeback message: Ready to post a comment.