知乎热搜信息过滤器

知乎热搜信息过滤器 | 去除明星相关信息

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @name         知乎热搜信息过滤器
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  知乎热搜信息过滤器 | 去除明星相关信息
// @require https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js
// @author       夏2同学
// @match        https://www.zhihu.com*
// @match        https://www.zhihu.com/*
// @match        http://www.zhihu.com/*
// @grant        none
// ==/UserScript==

'use strict'
let beforeUrl = window.location.href
let blackList = ['于谦', '郑爽', '王鸥', '宋丹丹', '杨幂', '魏大勋', '汪峰'] // 黑名单
let whiteList = [] // 白名单

window.setInterval(__init__, 1000)

if (window.location.href.indexOf('hot') !== -1) {
  // 在hot页面
  storeInit()
  filterHot()
  noAds()
  addBtns()
  $(document).on('click', '.blockHot', function (e) {
    BlockItem(e)
  })
}

function __init__() {
  // 每隔1s检测url是否改变,初始化函数
  if (window.location.href !== beforeUrl) {
    console.log('---------------分割线start------------------')
    // url 发生改变了
    beforeUrl = window.location.href
    console.log('url发生了改变')
    if (window.location.href.indexOf('hot') !== -1) {
      // 过滤热门页面的信息
      storeInit()
      filterHot()
      noAds()
      addBtns()
    }
    console.log('---------------分割线end-----------------')
  }
}

function isHavingKeyWord(str, keywords = blackList) {
  let index
  if (
    localStorage.getItem('blackList') !== undefined ||
    localStorage.getItem('blackList') !== null
  ) {
    // 初始化读取 本地存储
    keywords = JSON.parse(localStorage.getItem('blackList'))
  }

  for (index in keywords) {
    // console.log('index=', keywords[index])
    if (str.indexOf(keywords[index]) != -1) {
      // 说明包含关键词
      return {
        res: true,
        keyword: keywords[index],
      }
    }
  }
  return false
}

function noAds() {
  // 去除首页广告
  let adList = $('*[alt="广告"]')
  // console.log(adList)
  adList = Array.from(adList)
  if (adList.length !== 0) {
    let item
    adList.forEach((item) => {
      item.style.display = 'none'
      console.log('有一条广告被隐藏了!', item)
    })
  }
}

function filterHot() {
  let list = $('#TopstoryContent > div > div > div.HotList-list > section')

  // console.log(list)
  let key
  for (key in list) {
    //  执行返回操作
    if (key === 'length') {
      return
    }

    // 依次遍历
    let detail = list[key].innerHTML
    console.log('key=', key - 0 + 1)
    // console.log(detail)

    let msg = isHavingKeyWord(detail)

    if (msg.res) {
      // console.log(list[key])
      // 隐藏该元素
      list[key].style.display = 'none'
      console.log(
        `移除了一条热搜信息,其key =  ${key - 0 + 1},keyword = ${
          msg['keyword']
        }`,
      )
    }
  }
}

function addBtns() {
  let dom =
    '<span class="HotItem-action blockHot"><div class="Popover ShareMenu"> <div class="ShareMenu-toggler" id="Popover3-toggle" aria-haspopup="true" aria-expanded="false" aria-owns="Popover3-content" > <img class="ShareMenu-fakeQRCode" src="https://www.zhihu.com/qrcode?url=https%3A%2F%2Fwww.zhihu.com%2Fquestion%2F440614545%23showWechatShareTip" alt="微信二维码" /><button type="button" class="Button Button--plain Button--withIcon Button--withLabel" > <span style="display: inline-flex; align-items: center;" >​ <svg class="Zi Zi--Report" fill="currentColor" viewBox="0 0 24 24" width="14" height="14" style="margin-right: 4px;" > <path d="M19.947 3.129c-.633.136-3.927.639-5.697.385-3.133-.45-4.776-2.54-9.949-.888-.997.413-1.277 1.038-1.277 2.019L3 20.808c0 .3.101.54.304.718a.97.97 0 0 0 .73.304c.275 0 .519-.102.73-.304.202-.179.304-.418.304-.718v-6.58c4.533-1.235 8.047.668 8.562.864 2.343.893 5.542.008 6.774-.657.397-.178.596-.474.596-.887V3.964c0-.599-.42-.972-1.053-.835z" fill-rule="evenodd" ></path> </svg> </span >屏蔽 </button> </div> </div></span > '

  list = $(
    '#TopstoryContent > div > div > div.HotList-list > section > div.HotItem-content > div',
  )

  list = Array.from(list)
  let item
  list.forEach((item) => {
    item.append($(dom)[0])
  })
}

//string字符串转为dom
function parseToDOM(str) {
  var div = document.createElement('div')
  if (typeof str == 'string') div.innerHTML = str
  return div.childNodes
}

function addKeyWord(keyword) {
  let blackList = localStorage.getItem('blackList')
  let keywords
  if (blackList !== undefined || blackList !== null) {
    // 初始化读取 本地存储
    keywords = JSON.parse(localStorage.getItem('blackList'))
    keywords.push(keyword)
  }
  localStorage.setItem('blackList', JSON.stringify(keywords))

  location.reload()
}

function storeInit() {
  let item = localStorage.getItem('blackList')
  if (item === undefined || item === null) {
    localStorage.setItem('blackList', JSON.stringify(blackList))
  }
}

function BlockItem(e) {
  let element = e.currentTarget || e.srcElement || e.toElement
  console.log(
    element.parentElement.parentElement.children[0].getAttribute('title'),
  )
  let defaultValue = element.parentElement.parentElement.children[0].getAttribute(
    'title'
  )
  let keyword = prompt('请确认屏蔽关键词!', defaultValue)
  console.log(keyword)

  if (keyword !== null) {
    // 说明用户点击了确认
    addKeyWord(keyword)
  }
}