iPod から del.icio.us に簡単にアクセスするブックマークレットを作ろうとして挫折

iui を使って、iPod から del.icio.us のブックマークに簡単にアクセスできるブックマークレットを作ろうした。でも del.icio.us が返す json は、最大でも最新のブックマーク100個までという制限があるので、ブックマークの一覧を取得できない*1
ブックマークの全てのデータを取ってくるには、まずタグ一覧を取得して、その後各タグに属するブックマークを持ってくる必要がある。でもこの方法だと複数のタグがついているブックマークが重複するし、100個以上のブックマークがあるタグの内容は全部持ってこられないし、なによりタグの数だけ del.icio.us にアクセスしにいくことになってこれは軽く攻撃である。ローカルの DB 的なものにデータをキャッシュしたりとかすれば普通にできるだろうけど、それだとブックマークレットにはならないよなぁと思ってあきらめた。
とはいえ iPod から del.icio.us にアクセスしたいという(自分の)要求は相変わらずあるわけで、もしやる気が復活したらどっかのサーバを使ってやってみる予定。

以下ソース。ブックマークレット化はしてなくて、手元のサーバで動かしてた。とりあえず del.icio.us にアクセスしてタグ一覧を iPod 的見た目で出力するところまではできる。
iui.js の中で onload で動き出す処理があって、これが動く前に body 部分を作らないといけない。なので適当に iui の該当部分(addEventListener("load",...) のとこの最初)に "idelicious();" と加える。

idel.js

function idelicious(){
   var d = document;

   // create tool bar
   var toolbar = d.createElement('div');
   toolbar.setAttribute('class', 'toolbar');
   toolbar.innerHTML = "<h1 id='pageTitle'></h1>"+
      "<a id='backButton' class='button' href='#'></a>"+
      "<a class='button' href='#searchForm'>Search</a>";
   d.body.appendChild(toolbar);

   // create menu
   var tagmenu = d.createElement('ul');
   tagmenu.id = 'tagmenu';
   tagmenu.setAttribute('title', 'YourTags');
   tagmenu.setAttribute('selected', 'true');
   d.body.appendChild(tagmenu);

   // create menu-item contents
   jsonpScr = d.createElement('script');
   jsonpScr.src = 'http://feeds.delicious.com/v2/json/tags/shozyxwv?callback=deliciousTagHandler';
   d.getElementsByTagName('head')[0].appendChild(jsonpScr);
}
function deliciousTagHandler(tagArr) {
   var d = document;

   function addDelimiter(str) {
      var li = d.createElement('li');
      li.setAttribute('class', 'group');
      li.innerHTML = str;
      return li;
   }
   var tagmenu = d.getElementById('tagmenu');

   var headChar = '';
   for (var tag in tagArr) {
      if (tag[0] != headChar) {
	 tagmenu.appendChild(addDelimiter(tag[0].toUpperCase()));
	 headChar = tag[0];
      }
      var li = d.createElement('li');
      var a = d.createElement('a');
      a.setAttribute('href','#'+tag);
      a.innerHTML = tag;
      li.appendChild(a);
      tagmenu.appendChild(li);
   }
}

idel.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>i.del.icio.us</title>
    <meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
    <style type="text/css" media="screen">@import "./iui/iui.css";</style>
    <script type="application/x-javascript" src="./iui/iui.js"></script>
    <script src="./idel.js"></script>
  </head>

  <body>
  </body>
</html>

*1:はてブならできるっぽいのに!