ZhihuAnaswerChecker-JavaScript

2022/8/17 10:00:00

目前为 2022-08-31 提交的版本。查看 最新版本

// ==UserScript==
// @name        ZhihuAnaswerChecker-JavaScript
// @namespace   Violentmonkey Scripts
// @match       https://www.zhihu.com/people/*
// @require     https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js
// @grant       window.open
// @grant       window.focus
// @version     1.3
// @author      老实人不接盘@知乎(主体编写),尼尼尼@知乎(初版编写)
// @description 2022/8/17 10:00:00
// @license     GPL3
// ==/UserScript==


// 知乎用户用于检查 “回答” 被屏蔽情况的Javascript脚本。
// 仅限检查“回答”项目,且单次执行只检查当前的单个页面。

// 简要操作说明:
// 1.在浏览器扩展商店中搜索“暴力猴“、”油猴“之类扩展插件,安装并启用。下面以”暴力猴“为例。
// 2.在暴力猴插件中点击”+“号,新建JS脚本,将此脚本内容全部复制粘贴进去并保存。
// 3.进入知乎主页,登录(不可用)知乎账户。在暴力猴插件控制台中启用上面保存的脚本。刷新页面,会看到页面顶部多出一个绿色”点击执行检查“按钮。
// 4.进入个人主页, 点击”回答“栏。页面加载完成后,点击“点击执行检查”按钮,即可输出当前页回答被屏蔽的情况。
// 5.也可以翻页进入以前的回答页面,检查以往任何一页的被屏蔽情况。但单次执行只能检查当前这一页。

// 建议用途:随手检查最新一页回答中的被屏蔽情况。注意不要过于频繁执行,以免被知乎拒绝请求。

(function() {
    'use strict';

    //全局变量设置
    var baseUrl = "https://www.zhihu.com/people";
    var currentUrl = window.location.href;
    var currentAllLinkList=[];
    var currentBlockedLinkList=[];
    var resultPage='';//检测结果页面文本。

    function c(v){
    	console.log(v);
    }


    //获取当前页面上回答、文章或想法链接链接(class="List-item")
    function getAllLinksOnCurrentPage(){
        var linkList = [];
        var currentPageLinks = document.querySelectorAll("a[data-za-detail-view-element_name=Title]");

        if( currentPageLinks.length != 0){
            //存入数组并计数
            currentPageLinks.forEach(function (listItem) {
                //取出关键信息并存入数组
                let link = listItem.href;
                let title = listItem.innerHTML;
                let infoItem = {title, link};
                linkList.push(infoItem);
            });
        }

        let tmp = getAllLinkList();
        setAllLinkList(tmp.concat(linkList));

        return linkList;

    }

    //对链接进行可访问性检查(非登录(不可用)状态、不区分“仅自己可见”和“仅自己和关注者可见”)。
    function checkAllLinkList(list){
        if(list.length != 0){
            c(list);
            var fetchCount = 0;
            list.forEach(function (listItem) {
                c('fetching...');
                let link = listItem.link;
                let title = listItem.title;
                fetch(link,{credentials:"omit"})
                    .then((response) => {
                    return response.text();
                }).then((data) => {
                    ++fetchCount;
                    //以网站响应页面中“没有知识存在的荒原”为标志,进行检查。
                    if (data.includes('没有知识存在的荒原')) {
                        currentBlockedLinkList.push(listItem);
                        c('当前被屏蔽结果:'+currentBlockedLinkList);

                    }
                    if(fetchCount === list.length){
                        c(currentBlockedLinkList);

                        let tmp = getBlockedLinkList();
                        setBlockedLinkList(tmp.concat(currentBlockedLinkList));

                        showResult();

                        //清除缓存
                        removeLocalStorage();
                        setAllLinkList([]);
                        setBlockedLinkList([]);
                        setCurrentPageNum(1);
                        setPageCount(1);
                        currentAllLinkList=[];
                        currentBlockedLinkList=[];
                     }
                });

            });
        }

    }

    //展示结果
    function showResult(){
        var allLinkList = [];
        var blockedLinkList = [];
        allLinkList = getAllLinkList();
        blockedLinkList = getBlockedLinkList();

        resultPage = '<!DOCTYPE html><html><body><div>检测完毕。<br>如有创作内容被屏蔽,请与知乎小管家交流,共同学习,共同进步。</div><p><div><b>当前页面总回答数量:'
            + allLinkList.length
            + ', 被屏蔽数量:'
            + blockedLinkList.length
            + '</b></div><p><div><table>';

        if(blockedLinkList.length !== 0) {
            blockedLinkList.forEach(function (listItem) {
                let cell = '<tr><td>'
                    + listItem.title
                    + '</td><td>'
                    + '<a href="'+listItem.link+'" target=_blank>'
                    + listItem.link
                    + '</a></td></tr>';

                resultPage += cell;
            });
        }

        resultPage +='</table></div></body></html>';

        //新建浏览器标签,并展示检查结果。
        const newTab = window.open('','_blank');
        newTab.document.write(resultPage);
        newTab.focus();
        alert('检测完毕。如有创作内容被屏蔽,请与知乎小管家交流,共同学习,共同进步。')
    }


    function init() {
        checkAllLinkList(getAllLinksOnCurrentPage());

    }

    function main() {
        c("执行main");
        addCheckButton();

    }

    //在页面上添加执行按钮
    function addCheckButton() {
        $('body').append('<div id="CheckLink">点击执行检查</div>')
        $('#CheckLink').css('width', '200px')
        $('#CheckLink').css('position', 'absolute')
        $('#CheckLink').css('top', '70px')
        $('#CheckLink').css('left', '350px')
        $('#CheckLink').css('background-color', '#28a745')
        $('#CheckLink').css('color', 'white')
        $('#CheckLink').css('font-size', 'large')
        $('#CheckLink').css('z-index', 100)
        $('#CheckLink').css('border-radius', '25px')
        $('#CheckLink').css('text-align', 'center')
        $('#CheckLink').click(function () {
            checkAllLinkList(getAllLinksOnCurrentPage());
        });
        //$('#CheckLink').draggable();

    }

    function handleLocalStorage(method, key, value) {
        switch (method) {
            case 'get' : {
                let temp = window.localStorage.getItem(key);
                if (temp) {
                    return temp
                } else {
                    return false
                }
            }
            case 'set' : {
                window.localStorage.setItem(key, value);
                break
            }
            case 'remove': {
                window.localStorage.removeItem(key);
                break
            }
            default : {
                return false
            }
        }
    }


    function removeLocalStorage(){
        handleLocalStorage('remove','currentPageNum');
        handleLocalStorage('remove','pageCount');
        handleLocalStorage('remove','allLinkList');
        handleLocalStorage('remove','blockedLinkList');
    }

    function setCurrentPageNum(v){
        handleLocalStorage('set','currentPageNum',v);
    }

    function setPageCount(v){
        handleLocalStorage('set','pageCount',v);
    }

    function getPageCount(){
        return handleLocalStorage('get','pageCount',0);
    }


    function setAllLinkList(v){
        handleLocalStorage('set','allLinkList',JSON.stringify(v));
    }

    function getAllLinkList(){
        return JSON.parse(handleLocalStorage('get','allLinkList',0));
    }

    function setBlockedLinkList(v){
        handleLocalStorage('set','blockedLinkList',JSON.stringify(v));
    }

    function getBlockedLinkList(){
        return JSON.parse(handleLocalStorage('get','blockedLinkList',0));
    }



    document.onreadystatechange = function(){
        if(document.readyState === "complete"){
            removeLocalStorage();

            setAllLinkList([]);
            setBlockedLinkList([]);
            setCurrentPageNum(1);
            setPageCount(1);
            main();
        }

    }
}



)();

QingJ © 2025

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