今更だけど、Tumblrがブックマーク付きメモ帳として使えそう

ソーシャルブックマークの欠点は、やはり全文検索がないことだ。(Yahooブックマークはまだ試す気になれない)

全文ではなくても、膨大なブックマークから後で曖昧な言葉で検索できたらラクだろう。そのためにタグやらコメントやらつけるのだが、全文検索の利便性には勝てないと思う。というかちゃんとタグ管理するのがめんどくさくて、どんなタグを付けたか覚えていない。似たようなタグが何個も出来てしまっている。

Tumblrは、投稿の簡易さに便があるが、検索機能が無いのが痛い。・・・と、思っていたら、こういうものを発見した。

Jacob DeHart - Tumblr search update

要するにTumblrAPIを利用してJavaScriptで自分のTumblr内を検索しているみたい。こいつをヘッダーに書いて、

<script src=”http://www.thisismydevsite.com/tumblr.js” type=”text/javascript”></script>

こっちを検索ボックスを置く場所に書けばいいっぽい。

<script type=”text/javascript”>Tumblr.searchBox()</script>

スクリプトは出来れば自分のサーバーに置いて欲しいと書いてある。

HTMLを編集するのが面倒くさいので自分ではまだやっていない。ログが多いと検索がもっさりしそうだが、作者のサイトでは一瞬でインクリメンタル検索できている。将来的には検索するログの数を制限するかもしれないとのこと。


で、これを使って僕がやりたいことは、ブラウジング中にちょっと気になる文章があれば次々にTumblrに投稿(quote)していって、あとでパラパラ眺めるなり検索するなり、ということ。画像やビデオを投稿することはハナっから考えていない。だからこそ検索が必要なのだ。


投稿のほうはTumblrが配布しているブックマークレットが素敵なので、基本はそれを使う。問題は、quoteで投稿した場合に、選択範囲内の改行やら何やらがすべて失われてしまうことだ。

ちなみにTumblrの中にあるブックマークレットOperaではツールバーにドラッグ&ドロップするだけでは登録されないので、ボタンを作る必要がある。というわけで作ったのだが、はてなダイアリーではOperaのカスタムボタンを置けないみたいなので、作りたい人は以下をコピーしてOperaボタンエディターの大きなテキストエリアに貼付け、小さい方のテキストエリアには好きな名前を入れる。

opera:/button/Go to page, "javascript:var d=document,w=window,e=w.getSelection,k=d.getSelection,x=d.selection,s=(e?e():(k)?k():(x?x.createRange().text:0)),f='http://www.tumblr.com/share',l=d.location,e=encodeURIComponent,p='?v=3&u='+e(l.href) +'&t='+e(d.title) +'&s='+e(s),u=f+p;try{if(!/^(.*\.)?tumblr[^.]*$/.test(l.host))throw(0);tstbklt();}catch(z){a =function(){if(!w.open(u,'t','toolbar=0,resizable=0,status=1,width=450,height=430'))l.href=u;};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else a();}void(0);", , "Post to Tumblr", " "

中身は手近なブックマークレットを読んでみる。 - tomisima::memoに詳しく説明されているので割愛するが、気に入らない動作がいくつか。


■quoteで投稿するときに、元の選択範囲内にある改行が反映されない!

これはここで解決した。選択範囲内の\nとかをbrタグで置換している。


■もう一つ、これは自分だけかも知れないが、投稿ウィンドウをポップアップではなくタブで開きたい!
MDIではない故に、タブサイクルできないのだ。

これを解決するために、

a =function(){if(!w.open(u,'t','toolbar=0,resizable=0,status=1,width=450,height=430'))l.href=u;

となっている部分を

a =function(){if(!w.open(u,'_blank'))l.href=u;

に変えてみた。

ブックマークレット作成用

opera:/button/Go to page, "javascript:var d=document,w=window,e=w.getSelection,k=d.getSelection,x=d.selection,s=(e?e():(k)?k():(x?x.createRange().text:0)),f='http://www.tumblr.com/share',l=d.location,e=encodeURIComponent,s=s.toString().replace(/(\r?\n)/g,'<br />'),p='?v=3&u='+e(l.href) +'&t='+e(d.title) +'&s='+e(s),u=f+p;try{if(!/^(.*\.)?tumblr[^.]*$/.test(l.host))throw(0);tstbklt();}catch(z){a =function(){if(!w.open(u,'_blank'))l.href=u;};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else a();}void(0);", , "Post to Tumblr", " "


■最後に、これが出来れば文句は無いと思えるのは、選択範囲内のリンクをそのままリンクとして投稿したい!

これはなかなか技術が必要みたいだ。このあたりを使って出来ないものか。

今のところ、それをしたい場合は、選択した部分のソースを表示して、HTMLを投稿欄に貼付けるしかないっぽい。

[追記 2008-1-1]
逆に、これができないとOpera付属のメモ帳以上の機能はないね。


※if(!/^(.*\.)?tumblr[^.]*$/.test(l.host)が何をやっているのか分かる人はコメントください。