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>