Google result tweaker

Mark & re order spam sites

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         Google result tweaker
// @namespace    https://www.topcl.net/myapps/write-a-user-script-to-tweaker-google-result.html
// @version      0.24
// @description  Mark & re order spam sites
// @author       VJ
// @match        https://www.google.com/search?*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    const resultSections=document.querySelectorAll('#rso');
    if(0==resultSections.length){ console.warn("No result found, google has page layout update?"); return; }
    const lastResultSection =resultSections[resultSections.length-1];

    const BlockList=[
        {hostname:"csdn.net",reason:"低质量社区",tobottom:true},
        {hostname:"iteye.com",reason:"低质量社区",tobottom:true},

        {hostname:"softonic.com",reason:"低相关度",tobottom:true},

        {hostname:"logphp.com",reason:"链接站",tobottom:true},

        {hostname:"outofmemory.cn",reason:"采集站",tobottom:true},
        {hostname:"ctolib.com",reason:"采集站",tobottom:true},
        {hostname:"voidcn.com",reason:"采集站",tobottom:true},
        {hostname:"saowen.com",reason:"采集站",tobottom:true},
        {hostname:"bbsmax.com",reason:"采集站",tobottom:true},

        {hostname:"stackoverrun.com",reason:"机翻采集站",tobottom:true},
        {hostname:"stackovernet.com",reason:"机翻采集站",tobottom:true},
        {hostname:"codeday.me",reason:"机翻采集站",tobottom:true},
        {hostname:"landcareweb.com",reason:"机翻采集站",tobottom:true},
        {hostname:"xbuba.com",reason:"机翻采集站",tobottom:true},
        {hostname:"kutu66.com",reason:"机翻采集站",tobottom:true},
        {hostname:"qastack.cn",reason:"机翻采集站",tobottom:true},
        {hostname:"stackoom.com",reason:"机翻采集站",tobottom:true},
        {hostname:"thinbug.com",reason:"机翻采集站",tobottom:true},

        {hostname:"91flac.com",reason:"不解释",tobottom:true},
        {hostname:"wenku.baidu.com",reason:"不解释",tobottom:true},
    ];

    const ExtractHandler=(resultContainer)=>resultContainer.querySelectorAll('div.g');

    const MatchHandler=(result,config)=>{
        const a=result.querySelector('div.rc div.r a');
        return 0 <= a.hostname.indexOf(config.hostname);
    };

    const BlockHandler=(result,config)=>{
        result.style.opacity='.5';
        const summary = result.querySelector('span.st');
        summary.innerHTML=`[${config.reason}]<br />`+summary.innerHTML
        if(config.tobottom){ lastResultSection.appendChild(result); }
    };

    const handledEntries=[];

    for(let c=0; c<resultSections.length; ++c)
    {
        const resultContainer = resultSections[c];
        //TODO: Skip links entry
        const items = ExtractHandler(resultContainer);
        for(let i=0;i<items.length;++i)
        {
            const resultEntry = items[i];
            if(-1!=handledEntries.indexOf(resultEntry)) continue;
            for(let j=0;j<BlockList.length;j++){
                const confEntry=BlockList[j];
                if(MatchHandler(resultEntry,confEntry)){
                    BlockHandler(resultEntry,confEntry);
                    handledEntries.push(resultEntry);
                    --i;
                    break;
                }
            }

        }
    }
})();