ZhihuHotFilter-JavaScript

2022/10/16 10:00:00

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        ZhihuHotFilter-JavaScript
// @namespace   Violentmonkey Scripts
// @match       https://www.zhihu.com/hot
// @require     https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js
// @grant       window.open
// @grant       window.focus
// @version     1.0
// @author      尼尼尼@知乎
// @author      备份公众号:尼尼尼不打拳
// @description 2022/10/16 10:00:00
// @license     GPL3
// ==/UserScript==


// 知乎用户用于过滤热榜中,自己感兴趣话题的Javascript脚本。

// 简要操作说明:
// 1.在浏览器扩展商店中搜索“暴力猴“、”油猴“之类扩展插件,安装并启用。下面以”暴力猴“为例。
// 2.在暴力猴插件中点击”+“号,新建JS脚本,将此脚本内容全部复制粘贴进去并保存。
// 3.登录知乎账户,进入知乎“热榜页”。在暴力猴插件控制台中启用上面保存的脚本。
// 4.刷新页面,会看到页面顶部多出一个绿色”点击过滤话题“的按钮。

// 建议用途:根据关键字过滤知乎热榜中自己感兴趣的话,关键字可自行修改。

(function() {
        'use strict';

        //全局变量设置
        var resultPage='';//检测结果页面文本。
        var resultList = [];

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

        // 关键词数组设置,可自行修改
        var keyWordList = ['男','女','儿','婚','孕','彩礼','嫁','娶','骚扰','姑','娘','姐','妹','哥','兄','弟','暴','偷拍','妇','夫','妻','父','母','爹','妈','婴','童','教授','奸','亵','嫖','孩','杨笠','张桂梅','卫生巾'];

        //获取热榜上所有提问链接
        function getAllHotLinks(){
            var linkList = [];
            var currentPageLinks = document.querySelectorAll("div[class = 'HotItem-content'] > a");

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

        }

        // 按关键字过滤话题
        function execHotFilter() {
            let allHotLinks = getAllHotLinks();
            if (allHotLinks.length !== 0) {
                allHotLinks.forEach(
                    function (listItem) {
                        let text = listItem.title;
                        keyWordList.forEach(
                            function (word) {
                                if (text.includes(word)) {
                                    resultList.push(listItem);
                                }
                            }
                        )
                    }
                )
            }

            //数组去重
            let uniqueResultList = [];
            resultList.forEach( item => !uniqueResultList.includes(item) ? uniqueResultList.push(item) : '')

            showResult(uniqueResultList);
            resultList = [];
            uniqueResultList = [];
        }

        //展示结果
        function showResult(uniqueResultList){
            resultPage = '<!DOCTYPE html><html><body><div><b>可能感兴趣的话题:'
                  + '</b></div><p><div><table>';

            if(uniqueResultList.length !== 0) {
                uniqueResultList.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();
        }

        function main() {
            c("执行main");
            addFilterButton();
        }

        //在页面上添加执行按钮
        function addFilterButton() {
            $('body').append('<div id="FilterHot">点击过滤话题</div>')
            $('#FilterHot').css('width', '200px')
            $('#FilterHot').css('position', 'absolute')
            $('#FilterHot').css('top', '70px')
            $('#FilterHot').css('left', '350px')
            $('#FilterHot').css('background-color', '#0000ff')
            $('#FilterHot').css('color', 'white')
            $('#FilterHot').css('font-size', 'large')
            $('#FilterHot').css('z-index', 100)
            $('#FilterHot').css('border-radius', '25px')
            $('#FilterHot').css('text-align', 'center')
            $('#FilterHot').click(function () {
                execHotFilter(getAllHotLinks());
            });
            //$('#CheckLink').draggable();

        }

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

        }
    }



)();