2010年03月11日(Thu)
■ SBNでタグ検索を拡張して使いたい場合
はてなブックマークやdelicious、GoogleBoookmarksと、ブックマークサービスはいろいろあるのだけれど、タグ検索は、基本的にand検索のみだった。これを、orやnot検索も使えるようにしたい、と、思って探してみたら、次のようなFireFoxの拡張機能があった。
- Hatebu IncSearch :: Add-ons for Firefox
- del.icio.us IncSearch :: Add-ons for Firefox
- Google Bookmarks IncSearch
- livedoor clip IncSearch :: Add-ons for Firefox
そこで、Hatebu IncSearchを試してみた。
- 初回起動時、また、同期(sync)時にSBNを全件ダウンロードするのに時間がかかる
- Hatebu IncSearchのeditははてなブックマークを編集しに行く
- 具体的には、編集のリンク先は"http://b.hatena.ne.jp/add?mode=confirm&url="
- データの反映を取得するには、syncして全件取得しなおす
IncSearchは便利だけれど、データの同期がちょっと時間かかるなぁ。本当だったら、サービス側に検索機能を強化してもらいたい。
みなさんは、SBN利用するときに、or や not検索、どうされていますか?上記以外の方法で、良い方法をご存知でしたら教えてください。
■ Amazon商品のはてなブックマークURLを生成するブックマークレット
はてなブックマークは、Amazonの商品ページにつきひとつ、ブックマークしているユーザや、それを含むエントリ(日記やブログ記事)を紹介するページを持っています。このはてなブックマークのページを見ると、どういう傾向の人がその商品(書籍など)に興味を持っていたり、どんなコメントやエントリが書かれているのかがざっと読めます。
次のブックマークレットはAmazonの商品を見ているときにクリックすると、新しいタブで、はてなブックマークの該当商品のページを開きます。(Google Chrome 5.0.342.2 devで確認済み)
javascript:var%20d=document,w=window,enc=encodeURIComponent,e=w.getSelection,k=d.getSelection,x=d.selection,s=(e?e():(k)?k():(x?x.createRange().text:0)),s2=((s.toString()=='')?s:('%E3%80%8C'+enc(s)+'%E3%80%8D')),i=d.getElementById('ASIN'),f='http://b.hatena.ne.jp/entry/www.amazon.co.jp/gp/product/'+i.value,l=d.location,p='?v=3&u='+enc(l.href)%20+'&s='+'%20'+s2+enc(d.title),u=f+p;try{if(!/^(.*%C2%A5.)?tumblrzzz[^.]*$/.test(l.host))throw(0);tstbklt();}catch(z){a%20=function(){if(!w.open(u))l.href=u;};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else%20a();}void(0)
そこで、Amazonの商品を見たときに、はてなブックマークのページを見るためのブックマークレットを書きました。Amazonの該当商品の画面で、クリックすると、はてなブックマークの該当商品のURLをtextareaに吐き出すので、それをアドレスバーにコピペしてください。
↓古いコード
javascript:(function(){var asin=document.getElementById('ASIN');if(asin){var url='http://b.hatena.ne.jp/entry/www.amazon.co.jp/gp/product/'+asin.value;}var ele=document.createElement('textarea');ele.style.width='100%';ele.value=url;document.body.insertBefore(ele,document.body.firstChild);ele.focus();ele.select();ele.ondblclick=function(){ele.parentNode.removeChild(ele);};ele.oncopy=function(){setTimeout(function(){ele.parentNode.removeChild(ele);},1);return true;}})()