// ==UserScript==
// @name 自动屏蔽三无用户点赞超过50%的回答
// @namespace http://bingkubei.cn/
// @version 0.9
// @description 自动屏蔽知乎三无用户点赞数>=50%的回答
// @author flowfire
// @match https://www.zhihu.com/question/*
// @match https://www.zhihu.com/settings/filter
// @grant GM_getValue
// @grant GM_setValue
// @downloadURL none
// ==/UserScript==
/*
依次获取每个回答的点赞用户
取前50位(太多怕卡,可以自己定义)
没有头像,0赞同,0感谢,0提问,0回答
只要其中超过三样,就算做三无用户
三无用户点赞数超过样本的一半则自动屏蔽
*/
(function() {
"use strict";
/*
var maxcount = 50;//检查数量,默认50,如果网好可以多设一点、最大可以设置成Infinity
var timer = 1000;//循环检查的时钟,默认一秒循环一次,已经检查的不会再次检查,所以保持1s即可。
var filter = 0.5;// 阈值, 当三无用户占比超过这个值得时候,屏蔽之
var autohide = true;// 是否自动隐藏,如果改为 false ,则回答默认不隐藏,只在答案前加一个标签说明
*/
/*不需要再修改脚本。现在可以直接在知乎设置中的 【屏蔽】一栏找到设置选项。*/
/*链接为 https://www.zhihu.com/settings/filter */
var maxcount = GM_getValue("maxcount", 50);//检查数量,默认50,如果网好可以多设一点、最大可以设置成Infinity
var timer = GM_getValue("timer", 1000);//循环检查的时钟,默认一秒循环一次,已经检查的不会再次检查,所以保持1s即可。
var filter = GM_getValue("filter",0.5);// 阈值, 当三无用户占比超过这个值得时候,屏蔽之
var autohide = GM_getValue("autofide",true);// 是否自动隐藏,如果改为 false ,则回答默认不隐藏,只在答案前加一个标签说明
if($("#zh-setting-page-black-list-wrap").length!==0){
$("#zh-setting-page-black-list-wrap").append('
');
var fil = $("#filter-vote-people");
fil.append('屏蔽答案设置
屏蔽三无用户点赞过多的答案,所有输入框按回车提交。
');
fil.append('');
fil = fil.find(".settings-item-content");
fil.append('');
fil.append("最多检查用户数量,当前值:"+maxcount+"。默认为50,设为Infinity则表示检查所有点赞用户(不建议,可能会导致加载缓慢)
");
fil.append('
');
fil.append('');
fil.append("循环检查的时间(毫秒),当前值:"+timer+"。默认为1000,一般不需要修改。
");
fil.append('
');
fil.append('');
fil.append("阈值,当前值:"+filter+"。默认为0.5,当三无用户占比超过这个值则屏蔽。
");
fil.append('
');
fil.append('');
fil.append("是否自动隐藏被标记答案,当前值:"+autohide+"。默认为true,如果改为false,则只会在答案上添加标记而不会自动隐藏。
");
fil.find("[data-gmfilter]").on("keypress",function(e){
if(e.keyCode===13||e.keyCode===10){
var value;
switch($(this).attr("data-gmfilter")){
case "maxcount":
value = $(this).val();
value = Number(value);
if(value!==value){
alert("请输入数字");
return;
}
if(value<=10){
alert("点赞数小于10不会被标记或隐藏。");
return;
}
GM_setValue("maxcount",value);
break;
case "timer":
value = $(this).val();
value = Number(value);
if(value!==value){
alert("请输入数字");
return;
}
GM_setValue("timer",value);
break;
case "filter":
value = $(this).val();
value = Number(value);
if(value!==value){
alert("请输入数字");
return;
}
if(value>=1||value<=0){
alert("该值必须大于0小于1");
return;
}
GM_setValue("filter",value);
break;
case "autohide":
value = $(this).val();
if(value=="false"){
GM_setValue("autohide",false);
}else if(value=="true"){
GM_setValue("autohide",true);
}else{
alert("只能输入 true 或 false");
}
break;
}
var name = $(this).attr("data-gmfilter");
value = GM_getValue(name);
$(this).next().find("span").html(value);
}
});
}
//回答区域
var box = $("#zh-question-answer-wrap");
var check = function(){box.children().each(function(index,dom){
//每个单独的回答
if($(dom).attr("data-checked-user")=="true"){
//如果该回答已经被标记过,则跳过
return;
}
//标记
$(dom).attr("data-checked-user","true");
//获取回答id以及初始化一些值
var aid = $(dom).attr("data-aid");
var count = 0;//点赞用户数量
var whiteuser = 0;//三零用户数量
var calcUser = function(nexturl){
//计算用户
if(nexturl===""||count>=maxcount){//如果用户已经判断完或用户超过定义的数量,则结束
if(count>10&&whiteuser/count>=filter){//如果点赞人数超过10并且三零用户超过阈值,则标记
$(dom).children().hide();
//$(dom).css("background","red");
var text = "(已统计赞数:"+count+",三无用户数:"+whiteuser+")";
var html = "该回答由于三无用户的点赞数过多而被隐藏"+text+" 【点击显示】
";
$(html).insertBefore($(dom).find(".zm-item-rich-text"));
$(dom).find("[data-tag=\"hide-answer\"]").on("click",function(){
if($(this).parent().attr("data-hide")=="true"){
$(this).parent().children().hide();
$(this).show();
$(this).parent().removeAttr("data-hide");
$(this).html("该回答由于三无用户的点赞数过多而被隐藏"+text+" 【点击显示】");
}else{
$(this).parent().children().show();
$(this).parent().attr("data-hide","true");
$(this).html("给该回答点赞的三无用户过多"+text+" 【点击隐藏】");
}
});
if(!autohide){
$(dom).find("[data-tag=\"hide-answer\"]").click();
}
}
return;
}
//获取点赞用户信息,知乎居然不是返回数据而是直接返回html简直脑子有坑
$.ajax({
url : nexturl,
method : "get",
dataType : "json",
success : function(data){
count += data.payload.length;//计算用户的数量
data.payload.forEach(function(data){
//依次判断每个用户是否为三零用户
var zero = 0;//信息为0的个数
var userinfo = $($.parseHTML(data));
//获取头像、点赞数等信息
var img = userinfo.find("img").attr("src");
var zt = userinfo.find(".status li span:eq(0)").html();
var gx = userinfo.find(".status li span:eq(1)").html();
var tw = userinfo.find(".status li a:eq(0)").html();
var hd = userinfo.find(".status li a:eq(1)").html();
//可以在此用自己的方法调整权重
if(img == "https://pic1.zhimg.com/da8e974dc_m.jpg")
zero += 1;
if(zt == "0 赞同")
zero += 1;
if(gx == "0 感谢")
zero += 1;
if(tw == "0 提问")
zero += 1;
if(hd == "0 回答")
zero += 1;
if(zero>=3)
whiteuser += 1;
});
calcUser(data.paging.next);
}
});
};
setTimeout(function(){calcUser("/answer/"+aid+"/voters_profile");},0);
});
};
setInterval(check,timer);
// Your code here...
})();