Greasy Fork is available in English.

baijiahao-fucker

删除搜索结果中关于百家号与百度视频的内容

// ==UserScript==
// @name         baijiahao-fucker
// @namespace    http://tampermonkey.net/
// @include      http://www.baidu.com/s*
// @include      https://www.baidu.com/s*
// @description  删除搜索结果中关于百家号与百度视频的内容
// @author       LuRenJiasWorld
// @grant        GM.xmlHttpRequest
// @run-at       document-end
// @version	 0.21
// @connect      www.baidu.com
// ==/UserScript==

// 初始化
(function () {
	fuckBaijiahao();
})();


// 因为百度搜索采用了路由机制,切换搜索词不刷新页面
// 因此在切换搜索词的时候,插件将不再生效,需要定时检测URL是否改变
var urlStore = window.location.href;
setInterval(() => {
	let currentUrl = window.location.href;
	if (currentUrl !== urlStore) {
		let interval = setInterval(() => {
			if ($("#_mask").length !== 1) {
				fuckBaijiahao();
				clearInterval(interval);
			}
		}, 10);
		urlStore = currentUrl;
	}
}, 1000);

// 艹百家号
function fuckBaijiahao() {
	'use strict';

	// 所有搜索结果标签
	let tags = $('#content_left a[href^="http://www.baidu.com/link?url="]');

	// 聚合搜索结果(包含一部分百家号)
	let top = $('.c-offset');

	// 百度视频
	let video = $('.op-short-video-pc');

	// 普通计数器
	let counter = 0;

	// 百家号文章计数器
	let bjhCounter = 0;

	// 搜索结果数量
	let resultCounter = $(".nums_text");
	let resultCounterText = $(".nums_text").text();

	// 轮询每个链接,获取链接背后的真实url
	// 发现URL包含baijiahao,删除之
	// 如果是聚合搜索结果,且聚合搜索结果中全是百家号,则删除整个聚合搜索框
	tags.each(function (i, v) {
		let url = $(this).attr('href');
		(function (url, currentNode) {
			url = url.indexOf("eqid") < 0 ? url + "&wd=&eqid=" : url;

			// 这里不能使用$.ajax(),因为浏览器默认禁止发起修改headers的请求
			GM.xmlHttpRequest({
				method: "GET",
				url: url,
				async: true,
				headers: {
					"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
					"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
					"Host": "www.baidu.com",
					"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7",
					"Pragma": "no-cache",
					"Cache-Control": "no-cache",
					"Accept-Encoding": "gzip, deflate, br",
					"Connection": "keep-alive"
				},
				onload: function (response) {
					let reg = /URL=['|"]([^'|"]+)/;

					if (reg.test(response.responseText)) {

						let realUrl = response.responseText.match(reg)[1];

						if (realUrl.indexOf('baijia') !== -1) {
							bjhCounter ++;

							// 去除父元素 直接删除该搜索结果
							// 针对单独搜索结果
							$(currentNode).parents('.c-container').remove();

							// 如果『聚合搜索』内容为空,直接删除父元素
							// 针对聚合搜索结果
							if (!top.children().length) {
								top.parent().remove();
							}

						} else {
							// 还原真实地址
							// 减小百度采集用户链接点击信息的概率
							// 保护隐私,从我做起
							$(currentNode).attr('href', realUrl);
						}

						resultCounter.text(resultCounterText + ",其中包含" + bjhCounter + "个百家号链接,已全部去除");
					}
				},
			});
		})(url, this);
	});

	// 记录日志
	// 因为上面清除百家号链接是一个异步过程,因此要一直轮询,一直到确定百家号文章数量不再改变,则记录日志
	let bjhCounterTmp = bjhCounter;
	let logCounter = 0;
	let interval = setInterval(() => {
		if (bjhCounterTmp !== bjhCounter) {
			bjhCounterTmp = bjhCounter;
		} else if (bjhCounter !== 0 && bjhCounterTmp !== 0){
			clearInterval(interval);
		} else if (bjhCounter === 0 && bjhCounterTmp === 0 && logCounter > 20) {
			// 针对网页内确实没有百家号的情况
			// 且时间已经超过四秒钟
			clearInterval(interval);
		}
		logCounter++;
	}, 200);

	// 移除百度视频
	if (video.length !== 0) {
		video.parent().remove();
	}
}