素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

Google検索結果をフィルタリングするFilterinGoogleというGreasemonkeyスクリプトを作りました

追記:バグの修正をしました。
最新のスクリプトは[FilterinGoogle] - 素人がプログラミングを勉強するブログからチェックしてください。

センスの無い名前ですが、作りました。
wedataの404 Not Foundかスクリプト本体に自由にフィルター規則を追加できます。

FilterinGoogle.user.js

// ==UserScript==
// @name           FilterinGoogle
// @namespace      http://d.hatena.ne.jp/javascripter/
// @include        http://www.google.co.jp/
// ==/UserScript==
var ITEM_DELETE=false;//trueだと削除、falseだと半透明

var USER_RULES=[
'http://swik.net/'
];//文字列または正規表現で指定

var IMPORT_URL='http://wedata.net/databases/FilterinGoogle/items.json';

var get_cache=function(callback){
	var cache=GM_getValue('cache');
	if(cache){
		callback(eval(cache));
	}else{
		GM_xmlhttpRequest({
			method:'GET',
			url:IMPORT_URL,
			onload:function(res){
				var urls=eval(res.responseText).map(
					function(i)
					i.data.url.indexOf('/')?
					i.data.url:
					RegExp(i.data.url.slice(1,-1)));
				GM_setValue('cache',uneval(urls));
				callback(urls);
			}
		});
	};
}
get_cache(function(SITEINFO_RULE){
	var RULES=USER_RULES.concat(SITEINFO_RULE);
	var deleteItem=ITEM_DELETE?
	function(element){
		element.parentNode.removeChild(element);
	}
	:
	function(element){
		element.style.opacity='0.5';
	};
	var gc=function(root){
		Array.filter(root.getElementsByClassName('g'),
			function(item)
				RULES.some(function(url)
					item.getElementsByClassName('l')[0].href[typeof(url)=='string'?'indexOf':'search'](url)!=-1
			)
		).forEach(deleteItem);
	}
	gc(document.getElementById('res'));
	
	window.AutoPagerize&&
	 window.AutoPagerize.addFilter(
		 function(docs){
			 docs.forEach(deleteItem);
		 }
	);
});

ToDo:

  1. 削除しないものを指定できるようにする
  2. Firefox3以外でも使えるように。

参考にしたところ:

  1. 風柳亭: 『はてブフィルタ』-Googleの検索結果をはてブでフィルタリングする(ブックマークレット/Greasemonkey/SeaHorse)

など。