Google検索結果のクリップ系サイトから直接元記事へ飛ぶGreasemonkey

クリップ系サイトとはソーシャルブックマークサイトとも言う。(タイトル短くしたかったのでクリップ系サイトと呼んでみた)
はてなブックマークとかLivedoorクリップとかBuzzurlとか。
クリップ系サイトがGoogle検索結果に出てくるのって邪魔だと感じている人が多いと思う。(人によっては便利なのかもしれないけど)
これに対抗し、リンククリックで直接おおもとの記事へのジャンプを試みるGreasemonkeyスクリプト
YAjaro for Greasemonkey

どちらも同じページへ

そもそも

クリップ系サイトの何が問題なのか?
正しくは、クリップ系サイトがGoogle検索結果上位に出てくることの何が問題なのか?と言うべきか。ソーシャルブックマーク自体は便利に使っている人も多いと思うので。

第1の問題点

そもそも、よくあるパターンを分析してみると、
Googleの検索結果に出てきたリンクをクリックしたら(読み込みの重い)ブックマークページに飛ばされてうぜーとなる」
というパターン。


さらに歯がゆいのは、
「記事タイトル記事タイトル記事タイトル - ブログ名」
これがが元の記事だとすると、ソーシャルブックマークサイトでは
「記事タイトル記事タイトル記事タイトル - ブログ名 - ブックマークサイト名
みたいなページタイトルにしてやがるサイトも多いから
Google検索結果上では後ろが省略されて、
「記事タイトル記事タイトル記事タイトル - ブログ名...」
とかになってもとのサイトと区別できなくなることが多い。
(この点、はてなとかは先頭に「はてなブックマーク - 」とかくっつけているのでまだ良心の呵責があるか?)


(これGoogleの方が対応してもいいと思うんだよね。こんな風に真ん中を省略してくれればいいんだよ。
「記事タイトル記事タイトル記... - ブックマークサイト名」
Googleならそんなに難しくないと思うんだけどな)

第2の問題点

とここまで書いたが、実は上記の「第1の問題点」はfaviconize(参考:あらゆる所にFaviconを付けられる可能性を秘めたGreasemonkey - blooo)を入れているので解決されている。
はてなならはてなのファビコン、BuzzurlならBuzzurlのファビコンが表示されるので区別できる。)
しかし、仮にファビコンで「これはクリップ系サイトのページだ」と判断できても肝心の元記事のページがGoogleの上位に表示されていなかったら結局クリップ系サイトを経由して飛ぶしかない

こうしたい

「記事タイトル記事タイトル記事タイトル - ブログ名...」
を何気なくクリックしても、オリジナルの記事に飛んでほしい。それが直観にも近い。

そこで

snakaさんがjaroというスクリプトを作っていらっしゃったんですが、
これを改造させて頂きました。

動作

Google検索結果上でクリップ系サイトのリンクを何気なくクリックしても
オリジナルの記事を判断し、そこに直接飛ぶ。

どちらも同じページへ

といってもよく失敗します。(ぉーぃ
自分でしばらく使っていたんですが、判定に失敗してクリップ系サイトのページに飛ばされることは少なくなかったです。
その場合は素直に経由して行ってください。別に導入前と手間は一緒ということで、お許し下さい。

改訂追記

efclさんに書いて頂いた改良版飛躍的に精度が向上します。僕がこれまで実験した経験上、ほぼ無敵なはずです。(説明は省く後述)
インストールはこちらから。gist: 216105 - GitHub
これは本気で便利になるかも。本気でwedata対応を考えてみようかな。

インストール

YAjaro for Greasemonkey
改良版をおすすめgist: 216105 - GitHub

お試し

お試しの検索結果ページはこちらでどうでしょうか。
google:greasemonkey jaro
少し薄くなっているリンクがクリップ系サイトのリンクです。さて結果はいかに。

その他

  1. クリップ系サイト自体に行きたいという奇特な人がいないとも限らないので、はてなLivedoorのページ(もとのリンクそのもののページ)に飛ぶリンクもつけました。クリップの画像をクリックして下さい。
  2. 半透明にする範囲を変えられます。スクリプトの一番上のvar opacity = 1;を変更して下さい。

Wedata

オリジナルのスクリプトjaroはWedataに対応しているのですが、このスクリプトは対応していません。
いずれ対応したいけど、・・・よくわかりませんので誰かy
あと、スクリプト内でSITEINFOを追加することはできますが、はっきりいってめんどくさいです。(SITEINFOを見ればわかるように「タイトル中の不要文字部分」の設定が判定に必要なんですが、ここスマートじゃない…誰かもっとスマートなやり方をかんg)
やっぱりこのスクリプトのしかけには限界があるか。

最後に

作ったはいいけど…精度が思ったより良くなくて逆にいらいらするかもしれません。素直に非表示にする方がよかったかな。→本体じゃなくてefclさんの改良版を使ってください。

発想は好きだったんだけどなぁ。しかけを見てぴんときた方、改造や応用は大歓迎です。

参考サイト

Google検索の上位に表示されているページが元ページへのリンクを貼っただけのサイトでイラッとしたのでグリモン書いた - 今日もスミマセン。
オリジナルです。

他人の記事のタイトルを使ってスパムリンクを大量に貼ってるウザいページ - by edvakf in hatena
畳んであって便利。下に行けばいつか出てくるんだし、AutoPagerize入れてればそれも大変じゃないし、こういうやり方がスマートだったんじゃないかと思う。

追記:しかけについて

【以下長文につき注意】
しかけについては汚いコードを見てのお楽しみということにしていたつもりだったのですが、自分が数ヶ月前までjavascriptをほとんど書いたこともなかったことを思い出し、そんな面倒なことしなくてもここで説明を読めれば、誰かの役に立つかもしれないと思い書いておこうと思う。


一言で言えば、efclさんもご指摘の通り、「おおもとのサイトの判定」にはGoogleI'm feeling Luckyを使っています。I'm feeling Luckyとは、一番それっぽいサイトを判断し検索結果画面を経ずに飛んでくれる機能のこと。
Google ヘルプ: 検索機能
と言うとさすがGoogle!自動判定なんてどんなアルゴリズム使ってんだ、みたくすごいように聞こえるが、なんのことはない。
検索結果の一番目のサイトに飛んでくれるだけの機能。
(もちろんその一番目を出すアルゴリズムがすごいんだろうけど)


で、やってみたい人は、いつものGoogle検索結果画面のURLの最後に

&btnI=I%27m+Feeling+Lucky

を付けてEnter押せばOK。見事検索結果一番上のサイトに直接に飛んでくれるはず。


そして、「このI'm feeling Luckyを使えばクリップ系サイトに対抗できるんじゃないか?」という思いつきはオリジナルのjaroスクリプトを見て以来ずっとあたためていたもので、最近グリモンスクリプトを書くのになれてきたため作ったというわけになります。


クリップ系サイトのリンクに当たったとき、
「リンクの大元記事のタイトル部分をコピーして再検索する」
という作業をすることもあったのではないでしょうか?
この「再検索」の代わりにI'm feeling Luckyを用い、

  1. リンクの大元記事のタイトル部分を取得し、
  2. それを検索語句にしてI'm feeling Lucky

という手順が主要なしかけということになります。


つまり、このスクリプト
「リンクの大元記事のタイトル部分をコピーして再検索した検索結果の一番上のサイトをクリックする」
のとおんなじことをする、ということになるわけです。


だから、問題点は自ずからわかると思います。
元記事のタイトル名で検索した場合はさすがに元記事が一番上に来ることが多いのですが
やはりクリップ系サイト、とくにはてなブックマークは強く、元記事を差し置いて検索結果のトップにくることもたまにあります
そうすると「判定に失敗」し、はてなブックマークに飛ばされることになるわけです。
だから、Livedoorクリップのリンクをクリックしたらはてなブックマークに飛ばされた、なんてことさえ起こります。実際起こります。
精度をあげるためにintitle:オプション(inposttitle:でも同じだと思うけど)を付けたり、クウォテーション付けてみたら失敗したりと、あまり改善しない。


そこに登場したのがefclさんの改良版。
はてなブックマークをはじめ、クリップ系サイトを根こそぎ検索結果から-site:オプションで除外するという発想です。
「大元記事のタイトル名で検索した結果」にはてなブックマークが出ないとなると、大元記事がトップにくる可能性はかなり高まる。
ですよね!?


【それまでの検索結果トップ3.うまくいったとき】

  1. 大元サイト
  2. はてなブックマーク
  3. Livedoorクリップ

【それまでの検索結果トップ3.うまくいかなかったとき】

  1. はてなブックマーク
  2. Livedoorクリップ
  3. 大元サイト

↓↓↓【はてなLivedoorなどクリップ系サイトを検索結果から除外するある種のフィルタ】↓↓↓

【efclさん改良版の検索結果トップ3】

  1. 大元サイト
  2. その他のSITEINFOにも登録されていない弱小クリップ系サイト
  3. その他のSITEINFOにも登録されていない弱小クリップ系サイト

となるわけです。(弱小とか…言葉が過ぎてすみませんorz)


「ほぼ無敵」とか思うのはこういう理由です。

しかし問題点は残る

残された主要な問題点は、「タイトルの不要文字列」判定、のところです。
「タイトルの不要文字列」とは、
はてなブックマーク - 記事タイトル
における、「はてなブックマーク - 」のことです。


この「はてなブックマーク - 」を含めてintitle:で検索しちゃったら確実にはてなブックマークのサイトが一番上に来てしまう。
だから「タイトルの不要文字列」を除いて、純粋な「記事タイトル」を取得してI'm feeling Luckyせねばならんわけです。


で、この「タイトルの不要文字列」の判定の仕方がスマートじゃないと思うんです。
要するに、
前に付く「なんとかブックマーク - 記事タイトル」型はいいんですが、
後に付く「記事タイトル - なんとかブックマーク」型に問題があります。
というのも、「記事タイトル - なんとかブック...」と省略されるので、取得が難しいんです。


Livedoorクリップの使い方 - hogeブログ - Livedoorクリッ...」とかになると…もうわけわかr
ここさえもう少しスマートにできたら完璧だと思います。

でも、はてなは前型なので取得は100%できる。つまり少なくともとりあえず
はてなブックマークのリンクだけは安心してクリックできると思っていいんじゃないでしょうか。