RE:Google検索フィルタリング

http://d.hatena.ne.jp/kennak/20100510/1273468522

// ==UserScript==
// @name           Google検索フィルタリング
// @namespace      http://www.google.com/search
// @include        http://www.google.co.jp/search?*
// ==/UserScript==
(function(){
    var menu = 0;
    //xpathで指定された箇所に属性としてstyleを追加
    function addAttribute(xpath,style){
       
        var node = document.evaluate(xpath,document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );

        if(node.snapshotLength){
            //console.log(node.snapshotLength + 'find');

            for (var i = 0; i < node.snapshotLength; i++) {
                //console.log(node.snapshotItem(i));
                //node.snapshotItem(i).parentNode.removeChild(node.snapshotItem(i));
                node.snapshotItem(i).setAttribute("style", style);
            }
        }else{
            //console.log('none:' + xpath);
        }
        return node.snapshotLength;
    }

    //xpathで指定された箇所を削除
    function deleteItem(xpath){
        var node = document.evaluate(xpath,document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );

        if(node.snapshotLength){

            for (var i = 0; i < node.snapshotLength; i++) {
                node.snapshotItem(i).parentNode.removeChild(node.snapshotItem(i));
            }
        }else{
            //console.log('none:' + xpath);
        }
    }

    //xpathで指定された箇所にtxtを追加
    function addText(xpath,txt){
        var node = document.evaluate(xpath,document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );

        if(node.snapshotLength){
            if(menu == 0){
                menu = node.snapshotItem(0).textContent
            }

            node.snapshotItem(0).textContent = menu + txt;

        }else{
            //console.log('none:' + xpath);
        }
        //console.log('find:' + count + ':' +xpath);
    }

    //指定された単語でフィルタ
    function searchBlockWord(word){

        //詳細を隠す
        var count = addAttribute('//h3[@class="r"]/a[contains(@href,"' + word + '")]/../../../div[@class="s" or @class="s hc"]','display: none;');
        
		//タイトルをグレーアウト
        addAttribute('//h3[@class="r"]/a[contains(@href,"' + word + '")]/../../h3[@class="r" or @class="r hcw"]/a','font-size: 10pt !important;color:gray !important;');
        
        //liクラス縮小
        addAttribute('//li[h3/a[contains(@href,"' + word + '")]]',' min-height: 1px; 1px;border-bottom: 1px solid #C9D5F0 !important;padding-bottom: 4px ! important;');

        //タイトルを隠す
        //addAttribute('/html/body/div/div/div/div/div/ol/li/h3/a[contains(@href,"' + word + '")]','display: none;');

        return count;
    }

    //スタイル変更
    function setCSS(){

        //liクラスに下線
        addAttribute('/html/body/div/div/div/div/div/ol/li','display: inline-block !important;padding-bottom: 8px !important;border-bottom: 1px solid #C9D5F0 !important;');
        //ロゴ消去
        addAttribute('//*[@id="logo"]','display: none;');
        //セーフサーチリンクを右へ
        addAttribute('//*[@id="ss-status"]','float:right;padding-top:5%;');
        //検索ボックスに下線
        addAttribute('//*[@id="sfcnt"]','border-bottom: 1px solid #C9D5F0 !important;');

        addAttribute('//*[@class="gb1" or @class="gb2" or @class="gb1 translate" or @class="gb3" or @class="gb4"]','font-weight:normal;height:10px;');

        GM_addStyle(<><![CDATA[
            #leftnav a{
                font-weight:normal;
            }
            #tbd .tbt{
                border-bottom:1px solid #C9D5F0;
            }
            input[name="q"]{
                font-weight:normal;
            }
            .lst{
                float:left;
                font:14px arial,sans-serif;
                height:26px;
                width:100%;
            }
            a:link, .w, .q:active, .q:visited, .tbotu {
                color:#2D4CFF;
            }
            div.s, .j{
                width:auto !important;
                max-width:100% !important;
                padding-right:8px !important;
                text-align:justify !important;
                min-width:200px !important;
            }
			#leftnav {
				border-right:1px solid #C9D5F0;
				height:87%;
				overflow-y:auto;
				position:fixed !important;
				width:155px !important;
			}
        ]]></>);

    }

    var f = function(doc){
        setCSS(); 
        //フィルタリングするサイト
        var BLOCK_WORD=[
            '/word/',
            '/t/',
            '2ch',
            '2nn',
            'bookmark',
            'buzzurl',
            '/clips/',
            'clipp',
            'mixi',
            'oshiete',
            'keyword',
            'search',
            'twitter',
            'tag',
            'wassr',
            'patent.jpn.org',
            'b.hatena.ne.jp',
            'r.hatena.ne.jp',
            'clip.livedoor.com',
            'clip.nifty.com',
            'kotonoha.cc',
            'faq.tabitama.co.jp',
            'faves.com',
            'feed.designlinkdatabase.net',
            'flog.jp',
            'gaia.luna.tv',
            'ikubon.com',
            'i.pecipeci.net',
            'laszlo.jp',
            'kizasi.jp',
            'mag2qa.com',
            'mark.jolt.jp',
            'mobape.jp',
            'qa.mapion.co.jp',
            'qanda.rakuten.ne.jp',
            'soudan1.biglobe.ne.jp',
            'okyuu.com',
            'okwave.jp',
            'pookmark.jp',
            'questionbox.jp.msn.com',
            'qa.moonstar.co.jp',
            'renai.sunmarie.com',
            's.phpspot.org',
            'sqa.scienceportal.jp',
            'swik.net',
            'tbp.jp',
            'tech.newzia.jp',
            'townnote.jp',
            'wiki.livedoor.com',
            'youtube.com',
            'ziddy.japan.zdnet.com',
            'brothersoft.jp',
            'jp.downpanda.com',
            'sqlexecute.brothersoft.jp',
            'jp.brothersoft.com',
            'ww-ape.com',
            'www.softantenna.com',
            'maglog.jp',
            'softcollection.dyndns.org',
            'kaiteki-rich.com',
            'www.bit-st.jp',
            'www.itposts.net',
            'www.forums.wiaderko.com',
            'wiaderko.net',
            '210.132.71.11',
            'ja.efreedom.com/'
        ];

        //フィルタ実行
        var count = 0;
        for(var i = 0;i < BLOCK_WORD.length;i++){
            count += searchBlockWord(BLOCK_WORD[i]);
        }
        addText('//*[@id="resultStats"]',' - ' + count + '件削除しました');
    }

    f(document);
    if (window.AutoPagerize) {
      boot();
    } else {
      window.addEventListener('GM_AutoPagerizeLoaded',boot,false);
    }

    function boot(){
      window.AutoPagerize.addFilter(function(docs){
        docs.forEach(f);
      });
    }
})();