隠れん坊将軍の隠れ蓑

Sunday
October 19
2008

Googleの検索結果から任意のノイズを取り除くProxomitronフィルタ

このページの更新は終了しました。フィルタの最新状況については、Googleの検索結果から任意のノイズを取り除くProxomitronフィルタ : SARUMINOをご覧下さい。お手数をお掛け致します。


更新情報

  • 注意
    • 2010/05/06付けのGoogle側アップデートにより、現在使用できません。たぶん私自身このフィルタはないと困るので、そのうち対応すると思います…そのうち……たぶん。→詳細
    • Sleipnir Startなど、一部の特殊なスタートページからは利用できません。通常のGoogle検索をご利用ください。 (thanks:CORMさん)
    • Googleアカウントログインした状態では利用できません。ログイン時にはGoogle純正機能「サーチウィキ」をお試しください。

概要

先日深江直人(カッペ)さんのサイトは邪魔だよね、という話というエントリを書きました。この時は「カッペさん」名指しだったのですが、こういうのは他にも沢山あります。例えば価格比較のサイトが他のサイトの一部に組み込まれて大量コピー状態だったり、wikipediaのコピーが乱立していたり、それからOKWaveなんかもものすごい勢いでヒットしますよね。最近では、はてなが大量のspamページをばらまいていると話題にもなりました。

てなわけで、Proxomitronフィルタ「Google | cleanup search results」です。

リストに登録した「邪魔なURL」がGoogle検索にヒットした場合、該当部分を非表示にします。ただ非表示にするとそれはそれで不便なこともあるので、それらはページ下部のページャー部分にfaviconの形でまとめて表示するようにしました。

f:id:Falky:20081019203642p:image
[図1]使用例…価格比較サイトの邪魔なやつを一網打尽!

このfaviconにマウスオーバーするとページタイトルが表示されますので*1、必要であればだーっとチェックしてください。もちろん、faviconをクリックすればそのページへ飛ぶこともできます。

f:id:Falky:20081019203643p:image
[図2]ツールチップ表示例@Firefox2

最新版 @ 2009/01/26

[Patterns]
Name = "Google | cleanup search results 20090126"
Active = TRUE
URL = "www.google.co(m|.jp)/search?"
Limit = 1200
Match = "$KEYCHK(^16)$ADDLSTBOX(SearchSpam,URL(w/o http://))"
        "|"
        "(</head>)\8$SET(9="
        "<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js'></script>"
        "<script type="text/javascript" src="http://storage.samurizeupboard.jp/prototip.js"></script>"
        "<link rel="stylesheet" type="text/css" href="http://storage.samurizeupboard.jp/prototip.css">"
        "<script type="text/javascript">"
        "document.observe('dom:loaded', function() {"
        "  $$('a.prox_removed').each(function(element) {"
        "    new Tip( element , element.getAttribute('title') , {"
        "style:'darkgrey', delay:0, border:3, radius:3, width:'auto', hook:{target:'topMiddle',tip:'bottomMiddle'},"
        "hideAfter:1, hideOn: false, hideOthers:true, target:$('prox_cleanupreport'),"
        "    });"
        "  element.setAttribute('title','');"
        "  });"
        "});"
        "</script>)"
        "|"
        "<li class=g(\sstyle=$AV(*)|)(><h3 class=r><a href=$AV(("
        "http(s|)://$LST(AdList)*|(http(s|)://$LST(SearchSpam)*)\0)) class=l(\s[^>]+|)>)\8"
        "(([^<]+)\#((<(/|)(em|b)>|(^(^</a></h3>)))))+{1,*}$SET(9=<li class=g style="display:none;")"
        "($TST(\0=?*)"
        "$SET(SpamCounter=$GET(SpamCounter)A)"
        "$SET(SpamFavicons=$GET(SpamFavicons)"
        "<a class="prox_removed" href="\0" title="\@"><img src="http://favicon.hatena.ne.jp/?url=$ESC(\0)" style="
        ""border:1px solid #eee;width:16px;height:16px;margin-right:1px"></a>)|)"
        "|"
        "(</div><br clear="all"/>)\0$TST(SpamFavicons=?*)$SET(9="
        "\0<p style="text-align:center" id="prox_cleanupreport">"
        "Following<script type="text/javascript">"
        "  spamCounter = '$GET(SpamCounter)';"
        "  document.write(' <em>'+spamCounter.length+'</em>');"
        "</script> result(s) removed by Proxomitron.<br>$GET(SpamFavicons)</p>)"
Replace = "\9\8"
          ""
          "$SET(CREDIT="
          "Prototip 2 : Non-Commercial / Unlimited License Creative Commons 3.0 by-nc-nd , 2008 Nick Stakenburg )"

このフィルタではリストを使用します。任意の名前のテキストファイルをProxomitron\Lists以下に作り、Proxomitronに「SearchSpam」という名前で登録してください。このテキストの中に、検索結果から消したいURLを書いていくことになります。

リストのサンプルを用意しましたので、動作確認にでもお使いください。このリストを使用すると

  • カッペさんのサイトは全て非表示
  • OKWaveと各種価格比較サイトはそれぞれ本家サイトからの結果のみを表示

するようになります*2価格比較サイトが大量にヒットする検索例も置いておきますので、併せてどうぞ。

  • Shiftを押しながら検索結果のページをリロードすると、リストへURLを登録するダイアログが表示されます。登録する際いちいちtxtを開くのは面倒だと思いますので、簡易的に追加したい場合にご利用ください。
    • Shiftキーが他フィルタなどと競合する場合は$KEYCHK()を任意のキーに書き換えるか、あるいは削除してこの機能を無効にしてください。
  • AdListも同時に参照しています。AdListに載っているURLがヒットした場合、どうせクリックしてもConnection killed!が表示されて迷惑なだけですので、無言で除外しています。「無言で」というのはつまり、faviconも表示されず、除外エントリ数にも加算されないということです。
    • 逆に言えば、faviconで表示されるのも我慢ならないspamサイトがある場合は、SearchSpamではなくAdListに追加してやると幸せになれます。

そんなフィルタです。よろしければどうぞご利用ください。


過去のバージョン

バグ修正 @ 2008/12/11
  • 致命的なバグあり:Matchが無限ループするバグがあります
  • 検索結果が1ページしかない場合に除外エントリ一覧が表示できていなかったバグを修正
[Patterns]
Name = "Google | cleanup search results 20081211"
Active = TRUE
URL = "www.google.co(m|.jp)/search?"
Limit = 1000
Match = "$KEYCHK(^16)$ADDLSTBOX(SearchSpam,URL(w/o http://))"
        "|"
        "(</head>)\8$SET(9="
        "<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js'></script>"
        "<script type="text/javascript" src="http://storage.samurizeupboard.jp/prototip.js"></script>"
        "<link rel="stylesheet" type="text/css" href="http://storage.samurizeupboard.jp/prototip.css">"
        "<script type="text/javascript">"
        "document.observe('dom:loaded', function() {"
        "  $$('a.prox_removed').each(function(element) {"
        "    new Tip( element , element.getAttribute('title') , {"
        "style:'darkgrey', delay:0, border:3, radius:3, width:'auto', hook:{target:'topMiddle',tip:'bottomMiddle'},"
        "hideAfter:1, hideOn: false, hideOthers:true, target:$('prox_cleanupreport'),"
        "    });"
        "  element.setAttribute('title','');"
        "  });"
        "});"
        "</script>)"
        "|"
        "<li class=g(\sstyle=$AV(*)|)(><h3 class=r><a href=$AV(("
        "http(s|)://$LST(AdList)*|(http(s|)://$LST(SearchSpam)*)\0)) class=l(\s[^>]+|)>)\8"
        "(([^<]+)\#((<(/|)(em|b)>|(^(^</a></h3>)))))+{1,*}$SET(9=<li class=g style="display:none;")"
        "($TST(\0=?*)"
        "$SET(SpamCounter=$GET(SpamCounter)A)"
        "$SET(SpamFavicons=$GET(SpamFavicons)"
        "<a class="prox_removed" href="\0" title="\@"><img src="http://favicon.aruko.net/m/e/\0" style="
        ""border:1px solid #eee;width:16px;height:16px;margin-right:1px"></a>)|)"
        "|"
        "(<!--z-->(</div><br clear="all"/>|))\0$TST(SpamFavicons=?*)$SET(9="
        "\0<p style="text-align:center" id="prox_cleanupreport">"
        "Following<script type="text/javascript">"
        "  spamCounter = '$GET(SpamCounter)';"
        "  document.write(' <em>'+spamCounter.length+'</em>');"
        "</script> result(s) removed by Proxomitron.<br>$GET(SpamFavicons)</p>)"
Replace = "\9\8"
          ""
          "$SET(CREDIT="
          "Prototip 2 : Non-Commercial / Unlimited License Creative Commons 3.0 by-nc-nd , 2008 Nick Stakenburg )"
初版 @ 2008/10/19
  • 致命的なバグあり:Matchが無限ループするバグがあります
[Patterns]
Name = "Google | cleanup search results 20081019"
Active = TRUE
URL = "www.google.co(m|.jp)/search?"
Limit = 1000
Match = "$KEYCHK(^16)$ADDLSTBOX(SearchSpam,URL(w/o http://))"
        "|"
        "(</head>)\8$SET(9="
        "<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js'></script>"
        "<script type="text/javascript" src="http://storage.samurizeupboard.jp/prototip.js"></script>"
        "<link rel="stylesheet" type="text/css" href="http://storage.samurizeupboard.jp/prototip.css">"
        "<script type="text/javascript">"
        "document.observe('dom:loaded', function() {"
        "  $$('a.prox_removed').each(function(element) {"
        "    new Tip( element , element.getAttribute('title') , {"
        "style:'darkgrey', delay:0, border:3, radius:3, width:'auto', hook:{target:'topMiddle',tip:'bottomMiddle'},"
        "hideAfter:1, hideOn: false, hideOthers:true, target:$('prox_cleanupreport'),"
        "    });"
        "  element.setAttribute('title','');"
        "  });"
        "});"
        "</script>)"
        "|"
        "<li class=g(\sstyle=$AV(*)|)(><h3 class=r><a href=$AV(("
        "http(s|)://$LST(AdList)*|(http(s|)://$LST(SearchSpam)*)\0)) class=l(\s[^>]+|)>)\8"
        "(([^<]+)\#((<(/|)(em|b)>|(^(^</a></h3>)))))+{1,*}$SET(9=<li class=g style="display:none;")"
        "($TST(\0=?*)"
        "$SET(SpamCounter=$GET(SpamCounter)A)"
        "$SET(SpamFavicons=$GET(SpamFavicons)"
        "<a class="prox_removed" href="\0" title="\@"><img src="http://favicon.aruko.net/m/e/\0" style="
        ""border:1px solid #eee;width:16px;height:16px;margin-right:1px"></a>)|)"
        "|"
        "<br clear="all"/>(^(^<table id=nav\s))$TST(SpamFavicons=?*)$SET(9="
        "<br clear="all"/><p style="text-align:center" id="prox_cleanupreport">"
        "Following<script type="text/javascript">"
        "  spamCounter = '$GET(SpamCounter)';"
        "  document.write(' <em>'+spamCounter.length+'</em>');"
        "</script> result(s) removed by Proxomitron.<br>$GET(SpamFavicons)</p>)"
Replace = "\9\8"
          ""
          "$SET(CREDIT="
          "Prototip 2 : Non-Commercial / Unlimited License Creative Commons 3.0 by-nc-nd , 2008 Nick Stakenburg )"

ネタ

f:id:Falky:20081021173924p:image
……。

*1:但し、なぜかIEではこんなに美しくは表示されないようです。おかしいな…

*2:ただ、どうやらOKWaveは本家の内容をコピーサイト間で共有するだけではなく、各コピーサイトが、そのサイトの専門性に特化した独立のカテゴリを持っていることがあるようです。…日本語下手だなぁ。伝わってますか?例えば…本家にはA/B/Cというカテゴリがあり、それらはほぼ全てのコピーサイトにも掲載されていますが、逆にコピーサイトがDという独自のカテゴリを持っており、そのDカテゴリにポストされた相談は本家サイトや他のコピーサイトに掲載されていないというパターンがあるらしい、ということです。