特定のユーザーがブックマークしてた場合フィルタする方法
表題の内容はちょっと置いていて、はてなブックマークのコメントでid:otsuneさんからこうしたコメントをいただきました
id:otsune すばらしい。ekkenブクマとotsune netwatchタグが付いてるのを除去するXPathの実例が欲しいところ
http://b.hatena.ne.jp/otsune/20090120#bookmark-11704615
経緯を説明すると、これはおそらくTwitterでの私の発言を受けての内容ですね
[ダイアリー更新] はてブを正規表現やXPathでフィルタできるGreasemonkey http://tinyurl.com/9xsyoa 説明を書くのがメンドイ。まだ、これまでに作成したGreasemonkeyリストに追加しなきゃいけないしなー。
http://twitter.com/rikuo/status/1125832036
ただ、この Greasemonkey 作ってて思ったのだけど、特定ユーザーのお気に入りがブックマークしてたら、目立つようにする、という使い方はありだなと思った。
http://twitter.com/rikuo/status/1125833675
このままでもできるけど、スピンアウトさせてもいいかもしれない。例えば、お気に入りを2グループに分ける、というのはできる。(3グループ以上だとどうしようかな。)
http://twitter.com/rikuo/status/1125835572
あと真逆で、特定のユーザーをフィルタにするという手段もありかなと。名指しすると、前にも書いたけどid:ekken氏を揉め事フィルタにするとか、id:otsune氏の[netwatch]がついてれば、非表示とか(お気に入りページで、だけど)。
http://twitter.com/rikuo/status/1125839438
というのを書いていました。
どういうことか、もうちょっと詳しく説明するとですね
特定のユーザーをフィルタに使うことで、内容の選別が出来るのではないか?
現在のはてなブックマークのお気に入り機能は基本的に、「例)この人はJavascriptの話題に明るいから追加しよう」という具合にその人の興味のあることを自分も知りたいから、という動機で活用されているかと思います。
……なんですが、それを逆にその人が興味のあることをフィルタとして使えないか?というアイデアです。
具体的に言うと、私自身はてなブックマークでネットの議論とか揉め事とかがよく注目・人気エントリーに上がっているのを見て、興味ないなー、なんとか除外することができないものだろうかなー、と考えていました。
で元々は昨年、2008年9月のTwitterの投稿でもこう書いていました
個人的には「このユーザーがブックマークしていたら除外」という機能があればいいかなー。名指しするけれど、id:ekkenさんをフィルタに使えばかなりの「揉め事」を見なくできる。ちなみにid:ekkenさんの人品骨柄にどうというわけでない、ただ興味の範囲が合わないので。
http://twitter.com/rikuo/status/929155006
名指ししますが、id:ekkenさん、あと上でも挙げた id:otsuneさんは、私には興味ない揉め事とかを好んで収集しているんですね*1。で、そうした収集家をフィルタとして使うことで揉め事を巧く消去できないものだろうか?と考えていました。
ただ、当時ははてなブックマークのリニューアル前で、注目・人気エントリーを誰がブックマークしているのか?という情報を調べてフィルタする、というのはちょっと(私の技術的には)難しかったんですね、なのでアイデア止まりだったのですが、リニューアルでお気に入りが注目・人気エントリーに表示されるようになったので、
今回試してみようかな、という次第。
設定の方法
前置きが長くなりましたが、ようやく表題の「特定のユーザーがブックマークしてた場合フィルタする方法」です。
まず先日制作した
はてブを正規表現やXPathでフィルタできるGreasemonkey
をインストールしてください。
さらに、お気に入り機能ははてなブックマークユーザーでないと使えないので、
- はてなにログインもしくはユーザー登録
そして
- 任意のユーザーをお気に入りに登録
という作業をします。
で、設定は2種類
// 注目・人気エントリー用 xpath.hotentry = [ ]; // お気に入りページ用 xpath.favorite = [ ];
このGreasemonkeyはXPathでフィルタの条件をつけられるのですが、ページ構造が注目・人気エントリーとお気に入りページでは異なるので、それぞれ別に設定が必要になります。
まずは注目・人気エントリーでの場合
注目・人気エントリー
(id:sampleをお気に入りに登録していて)id:sampleをフィルタの条件にしたい場合は
// 注目・人気エントリー用 xpath.hotentry = [ 'descendant::li[@class="favorite"]/img[contains(@title,"sample")]', ];
このようになります。
実際には "sample" のところを任意のユーザー名に変更してください。例えばid:ekkenさんなら
xpath.hotentry = [ 'descendant::li[@class="favorite"]/img[contains(@title,"ekken")]', ];
こうですね。
注目・人気エントリーのページでは、このGreasemonkeyでタグをフィルタの条件に加えることはできないので、ユーザー名のみです。
お気に入りページの場合
(id:sampleをお気に入りに登録していて)id:sampleをフィルタの条件する、またid:sampleが [tag] をつけているエントリーを抽出したい場合は
// お気に入りページ用 xpath.favorite = [ 'descendant::li[@class="others"]/a[1]/img[contains(@title,"sample")]', 'descendant::li[@class="others" and child::a[1]/img[contains(@title,"sample")] and descendant::a[@class="user-tag" and contains(text(),"tag")]]', ];
このようになります。
つまり、id:ekkenさんと id:otsuneさんが[netwatch]をつけていた場合の設定なら
// お気に入りページ用 xpath.favorite = [ 'descendant::li[@class="others"]/a[1]/img[contains(@title,"ekken")]', 'descendant::li[@class="others" and child::a[1]/img[contains(@title,"otsune")] and descendant::a[@class="user-tag" and contains(text(),"netwatch")]]', ];
となるわけです。
とは言え、あくまで考えて見ただけで実際にはどの程度フィルタの効果が出るのかは、まだ検証していません。
もし効果があり、しかも割と使う人が多ければ、わざわざXPath書かなくてもも、この機能だけをスピンアウトさせる・もしくは機能追加してユーザーIDを登録するだけでフィルタの条件にできるよう改善するかもしれません。
追記
あと、フィルタで見えなくする方向で書いてますが、この Greasmonkeyは条件に合致すればむしろ強調して表示する、という機能も備えています。なので、真逆に揉め事大好きな人は、そうして使うとか、またこの人のブックマークは必ずチェックしたい、という場合にも使えます。
><
*1:念の為フォローしておくと、このお二方の「興味あること」には私は興味を持てないというだけで、人品骨柄をどうこう言うつもりはないです。