Acfun过滤UP计划

帮助你屏蔽不想看的UP主

目前为 2019-05-15 提交的版本。查看 最新版本

// ==UserScript==
// @name         Acfun过滤UP计划
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  帮助你屏蔽不想看的UP主
// @author       人文情怀
// @match        http://www.acfun.cn/a/ac*
// @match        http://www.acfun.cn
// @match        http://www.acfun.cn/v/list*
// @match        https://www.acfun.cn/a/ac*
// @match        https://www.acfun.cn
// @match        https://www.acfun.cn/v/list*
// @grant        GM_getValue
// @grant        GM_setValue
// ==/UserScript==



(function() {
    'use strict';
    function cleanList(){

        GM_setValue("ACFUN_BLOCK_LIST", []);
    }


   function helper()
   {
      var head= document.getElementsByTagName('head')[0];
      var script= document.createElement('script');
      script.type= 'text/javascript';
      script.src= 'https://d3js.org/d3.v3.min.js';
      head.appendChild(script);
   };
   helper();
    let up=function(){
        return GM_getValue("ACFUN_BLOCK_LIST",[]);
    };

    function addToList(id){
        let old = up();
        old.push(id);
        GM_setValue("ACFUN_BLOCK_LIST", old);
        $.info.show("已将UP主["+id+"]加入屏蔽列表")
        console.trace("a");
    }

    let filterButton = document.createElement("div");
    document.body.appendChild(filterButton);
    $(filterButton)
        .css("width","15px")
        .css("height","15px")
        .css("background-color","rgba(255,0,0,1)")
        .css("font-familty","'黑体',serif")
        .css("font-weight","600")
        .css("font-size","11px")
        .css("padding","1.5px")
        .css("left","0")
        .css("top","0")
        .css("transform","translate(-100%,0)")
        .css("display","block")
        .css("position","absolute")
        .css("z-index","99999")
        .css("background-size","contain")
        .css("background-image","url('https://cdn.aixifan.com/dotnet/20130418/umeditor/dialogs/emotion/images/ac/12.gif')")



    //获得所有主页的UP的DOM TAG,加上右键菜单
    function getHomeSelection(mark, mval, addMark){
        if (typeof addMark=="undefined"){
            addMark=false;
        }
        let res=[];
        //过滤主页视频
        let selections = $("a[data-info]");
        for (let i=0;i<selections.length;i++){
            let tag=selections[i];
            let m = tag[mark];
            if (addMark) tag[mark]=mval;
            if (typeof mark !== "undefined" && m!==mval && !addMark){
                continue;
            }
            let info=$(tag).attr("data-info");
            let json=JSON.parse(info);
            let username=json.userName;
            res.push({tag:$(tag).parent()[0], username: username, type: 1});
            //$(tag)
        }
        //过滤右边排行榜视频
        let sel=$("ul[data-con]");

        //For each rank
        for (let i=0;i<sel.length;i++){
            let tag=sel[i];
            let rows=$(tag).find("li");
            //For each row
            for (let ri=0;ri<rows.length;ri++){
                let rowTag = rows[ri];
                //
                let m = rowTag[mark];
                if (addMark) rowTag[mark]=mval;
                if (typeof mark !== "undefined" && m!==mval && !addMark){
                    continue;
                }
                //
                let aTag = $(rowTag).find("[title]")[0];
                let title=$(aTag).attr("title");
                let matches = usernameByTitle(title)
                if (matches){
                    let username = matches[0].substring(3).trim();
                    //$(rowTag)
                    res.push({tag:rowTag, username: username, type: 2});
                }
            }
        }
        //--------------------
        sel=$("div[data-con]");
        for (let i=0;i<sel.length;i++){
            let tag=sel[i];
            let rows=$(tag).find("li");
            //For each row
            for (let ri=0;ri<rows.length;ri++){
                let rowTag = rows[ri];
                //
                let m = rowTag[mark];
                if (addMark) rowTag[mark]=mval;
                if (typeof mark !== "undefined" && m!==mval && !addMark){
                    continue;
                }
                //
                let aTag = $(rowTag).find("[title]")[0];
                let title=$(aTag).attr("title");
                if (title){
                    let matches = usernameByTitle(title)
                    if (matches){
                        let username = matches[0].substring(3).trim();

                        res.push({tag:rowTag, username: username, type: 3});

                    }
                }
            }
        }
        return res;
    }

    function getListSelection(mark,mval, addMark){
        if (typeof addMark=="undefined"){
            addMark=false;
        }
        let res=[];
        let sel=$("div.weblog-item");
        //console.log("sel weblog")
        for (let i = 0;i<sel.length;i++){
            let row = sel[i];

            //
            let m = row[mark];
            if (addMark) row[mark]=mval;
            //console.log(mark, mval, m);
            if (typeof mark !== "undefined" && m!==mval && !addMark){
                //console.log("continue");
                continue;
            }
            //

            let aTag = $(row).find(".atc-up")[0];
            let username = $(aTag).attr("title");

            res.push({tag:row, username: username, type: 4});

        }
        return res;
    }

    function addPanel(){

    }
    let a = 0;
    function addButton(pageType){
        let attach= function(list){
            //console.log(list)
            for (let i=0;i<list.length;i++){
                let tag = list[i].tag;
                $(tag).mousemove(function(){
                    if (window.currentTag==tag) return;
                    let rect = tag.getBoundingClientRect();
                    let brect= filterButton.getBoundingClientRect();
                    let button = $(filterButton).detach();
                    //.css("left", (rect.right-brect.width)+"px")
                    //.css("top", rect.top+"px")
                    //.show();
                    $(tag)
                        .css("white-space","nowrap")
                        .css("overflow","visible")
                        .css("position","relative")
                        .append(button)

                    window.currentTag=tag;
                    window.currentUser=list[i].username;
                    $(filterButton).off("click");
                    if (pageType!=="home"){
                        $(filterButton)

                            .css("right","0")
                            .css("top","0")
                            .css("transform","translate(100%,0)")
                    }

                    $(filterButton)
                        .on("click",
                            function(){
                        console.log("current", window.currentTag, window.currentUser);
                        if (typeof window.currentTag!=="undefined" && window.currentTag!==null){
                            addToList(window.currentUser);
                            console.log("a=",a);
                            a++;
                        }
                    })
                        .show();
                })
                $(tag).mouseleave(function(){
                    let rect = tag.getBoundingClientRect();
                    $(filterButton).detach();
                    window.currentTag=null;
                    window.currentUser=null;
                    $(filterButton).off("click").hide()

                })

            }
        }
        if (pageType == "home"){
            let list = getHomeSelection("ATTACHED", true, true);
            attach(list);
        }else{
            let list = getListSelection("ATTACHED", true, true);
            attach(list);
        }

    }

    function addUI(pageType){
        addButton(pageType);
    }


    //
    console.log("match type", window.location.href)

    function usernameByTitle(title){
        let regex = /UP:(.+)[\s\v\n]/g
        return title.match(regex);
    }

    function FilterVideos(){
        let upList=up();

        //过滤主页视频
        let selections = $("a[data-info]");
        for (let i=0;i<selections.length;i++){
            let tag=selections[i];
            let info=$(tag).attr("data-info");
            let json=JSON.parse(info);
            let username=json.userName;
            if (upList.indexOf(username)>=0){
                $(tag).parent().css("visibility","hidden");
            }
        }
        //过滤右边排行榜视频
        let sel=$("ul[data-con]");

        //For each rank
        for (let i=0;i<sel.length;i++){
            let tag=sel[i];
            let rows=$(tag).find("li");
            //For each row
            for (let ri=0;ri<rows.length;ri++){
                let rowTag = rows[ri];
                let aTag = $(rowTag).find("[title]")[0];
                let title=$(aTag).attr("title");
                let matches = usernameByTitle(title)
                if (matches){
                    let username = matches[0].substring(3).trim();
                    if (upList.indexOf(username)>=0){
                        //找到了,隐藏本条
                        $(rowTag).css("visibility","hidden");
                    }
                }
            }
        }
    }

    //过滤主页文章区
    function FilterArticles(){
        let upList=up();
        let sel=$("div[data-con]");
        for (let i=0;i<sel.length;i++){
            let tag=sel[i];
            let rows=$(tag).find("li");
            //For each row
            for (let ri=0;ri<rows.length;ri++){
                let rowTag = rows[ri];
                let aTag = $(rowTag).find("[title]")[0];
                let title=$(aTag).attr("title");
                if (title){
                    let matches = usernameByTitle(title)
                    if (matches){
                        let username = matches[0].substring(3).trim();
                        if (upList.indexOf(username)>=0){
                            //找到了,隐藏本条
                            console.log("过滤文脏区 rank=", i, "row=",ri,"username=",username);
                            $(rowTag).css("visibility","hidden");
                        }
                    }
                }
            }
        }
    }

    //过滤文章列表页
    function FilterListPage(){
        let upList=up();
        let sel=$("div.weblog-item");
        //console.log("uplist = ", upList, sel);
        for (let i = 0;i<sel.length;i++){
            let row = sel[i];
            //if (typeof row.visited=="undefined"){ row.visited = true; }else{continue;}
            let aTag = $(row).find(".atc-up")[0];
            let username = $(aTag).attr("title");

            console.log("username",username, window.currentUser);
            if (upList.indexOf(username)>=0){
                //console.log("过滤文脏区",username);
                //屏蔽
                //$(row).css("display","none");
                //$(row).removeClass("wblog-item");
                //或者删除
                $(row).remove();
            }
        }
    }
    function HandleHomePage(){
        //屏蔽首页UP,包括视频和右边的文章区
        FilterVideos();
        FilterArticles();
        addUI("home");
        setTimeout(HandleHomePage, 800);
    }
    function HandleListPage(){
        //屏蔽文章页,
        FilterListPage();
        addUI("list");
        setTimeout(HandleListPage, 500);
    }
    $(document).ready(function(){
        if (window.location.href=="http://www.acfun.cn/"){
            HandleHomePage();
        }
        if (window.location.href.indexOf("www.acfun.cn/v/list")>=0){
            HandleListPage();
        }

    })

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址