// ==UserScript== // @name 哔哩哔哩评论区年龄与屏蔽算法——@_Bluem_的毕业设计的一部分 // @namespace http://tampermonkey.net/ // @version 0.3 // @author bilibili @_Bluem_ // @match *://*.bilibili.com/* // @grant none // @license MIT // @description 哔哩哔哩的信息收集系统,bluem的毕业设计的一部分 // @downloadURL none // ==/UserScript== (function() { 'use strict'; // Your code here... let replyNum = 0; let thisBV = ""; let thisUserName = ""; let thisUserUID = ""; let replyItemArr = [];//评论块列表 let replyUserNameArr = [];//评论的用户的名字 let replyUIDArr = [];//评论的用户的uid let replyContentArr = [];//评论的具体内容 let replyLikeArr = [];//评论点赞的数量 let replyAgreeBtnArr = [];//评论对应的认同按钮 let replyDisagreeBtnArr = [];//评论对应的反对按钮 let replyHateBtnArr = [];//评论对应的不想看到按钮 let hideReplyUIDArr = [];//隐藏起来的评论的用户的uid let hideReplyContentArr = [];//隐藏起来的评论的详情 thisBV = window.location.href.substr(window.location.href.indexOf("BV"), 12);//获取BV号 if(thisBV.length != 12){ thisBV = ""; } if(thisBV == ""){return} setInterval(update, 2000); start(); function start(){ let ageBoardHtml = `
年龄: 18
`; let newDiv = document.createElement("div") newDiv.innerHTML = ageBoardHtml; //document.getElementsByClassName("left-container")[0].innerHTML += ageBoardHtml; document.getElementById("video-page-app").append(newDiv); //document.body.innerHTML = ageBoardHtml + document.body.innerHTML; let showBtn = document.getElementById("bluemShowAgeHiddenBoardBtn"); showBtn.onclick = ()=>{ let showBoard = document.getElementById("bluemAgeHiddenBoard"); if(showBoard.hidden){ showBoard.hidden = false; showBtn.style.transform = "rotate(45deg) translate(3px, 3px)"; } else{ showBoard.hidden = true; showBtn.style.transform = "rotate(225deg)"; } } startAddClickEvent(); startPOST(); }//初始化 function update(){ let replyItem = document.getElementsByClassName("reply-item"); for(let item of replyItem){ let replyInfo = item.querySelector(".reply-info"); if(!checkIfAddMyBtns(replyInfo)){ addMyBtns(replyInfo); replyItemArr.push(item); replyUserNameArr.push(item.querySelector(".user-name").innerHTML); replyUIDArr.push(item.querySelector(".user-name").getAttribute('data-user-id')); replyContentArr.push(changeReplyContentInner(item.querySelector(".reply-content").innerHTML)); let likeItem = item.querySelector(".reply-like").querySelector('span[data-v-7592db79]') replyLikeArr.push(likeItem? likeItem.innerHTML :"0"); replyAgreeBtnArr.push(item.querySelector(".bluem-agree-btn")); replyDisagreeBtnArr.push(item.querySelector(".bluem-disagree-btn")); replyHateBtnArr.push(item.querySelector(".bluem-hate-btn")); addClickEvent(replyNum); replyNum += 1; }//主评论 let subReplyItemArr = item.querySelectorAll(".sub-reply-item"); for(let subItem of subReplyItemArr){ replyInfo = subItem.querySelector(".sub-reply-info"); if(!checkIfAddMyBtns(replyInfo)){ addMyBtns(replyInfo); replyItemArr.push(subItem); replyUserNameArr.push(subItem.querySelector(".sub-user-name").innerHTML); replyUIDArr.push(subItem.querySelector(".sub-user-name").getAttribute('data-user-id')); replyContentArr.push(changeReplyContentInner(subItem.querySelector(".reply-content").innerHTML)); let likeItem = subItem.querySelector(".sub-reply-like").querySelector('span[data-v-15f04a69]') replyLikeArr.push(likeItem? likeItem.innerHTML :"0"); replyAgreeBtnArr.push(subItem.querySelector(".bluem-agree-btn")); replyDisagreeBtnArr.push(subItem.querySelector(".bluem-disagree-btn")); replyHateBtnArr.push(subItem.querySelector(".bluem-hate-btn")); addClickEvent(replyNum); replyNum += 1; } }//小评论 }//遍历评论 let newBV = window.location.href.substr(window.location.href.indexOf("BV"), 12);//获取BV号 if(newBV.length == 12 && newBV != thisBV){ thisBV = newBV; startPOST(); } updateHide(); }//更新 function startPOST(){ if(!document.getElementsByClassName("header-entry-mini")[0]){ setTimeout(()=>{startPOST()}, 100); return } setName(); thisUserUID = document.getElementsByClassName("header-entry-mini")[0].href.split("https://space.bilibili.com/")[1]; let ajax = new XMLHttpRequest(); ajax.onreadystatechange = () => { if(ajax.readyState === 4 && ajax.status === 200){ let json = JSON.parse(ajax.responseText); document.getElementById("bluemAgeLabel").innerHTML = "年龄: " + json.age.toString(); document.getElementById("bluemAgeTextarea").value = json.age.toString(); hideListReply(json.hideList); } } ajax.open("POST", "https://bluem.top/biliReply/", true); ajax.setRequestHeader("content-type","application/x-www-form-urlencoded"); ajax.send("type=start&userUID=" + thisUserUID + "&BV=" + thisBV); }//开始的POST请求 function startAddClickEvent(){ let label = document.getElementById("bluemAgeLabel"); let ageTextarea = document.getElementById("bluemAgeTextarea"); let setAgeBtn = document.getElementById("bluemAgeChangeBtn"); let resetBtn = document.getElementById("bluemResetBtn"); setAgeBtn.onclick = ()=>{ if(!thisUserUID){return} let age = parseInt(ageTextarea.value); if(age <= 0){return} let ajax = new XMLHttpRequest(); ajax.onreadystatechange = () => { if(ajax.readyState === 4 && ajax.status === 200){ let json = JSON.parse(ajax.responseText); label.innerHTML = "年龄: " + age.toString(); hideListReply(json.hideList); } } ajax.open("POST", "https://bluem.top/biliReply/", true); ajax.setRequestHeader("content-type","application/x-www-form-urlencoded"); ajax.send("type=setAge&userUID=" + thisUserUID + "&age=" + age.toString() + "&BV=" + thisBV); } resetBtn.onclick = ()=>{ if(!thisUserUID){return} let age = parseInt(label.innerHTML.slice(4)); let ajax = new XMLHttpRequest(); ajax.onreadystatechange = () => { if(ajax.readyState === 4 && ajax.status === 200){ let json = JSON.parse(ajax.responseText); hideListReply(json.hideList); } } ajax.open("POST", "https://bluem.top/biliReply/", true); ajax.setRequestHeader("content-type","application/x-www-form-urlencoded"); ajax.send("type=restart&userUID=" + thisUserUID + "&age=" + age.toString() + "&BV=" + thisBV); } }//在start中添加点击事件 function setName(){ if(thisUserName){return} if(!document.getElementsByClassName("nickname-item")[0]){ setTimeout(()=>{setName()}, 2000); return } thisUserName = document.getElementsByClassName("nickname-item")[0].innerHTML; let ajax = new XMLHttpRequest(); ajax.onreadystatechange = () => { if(ajax.readyState === 4 && ajax.status === 200){ let json = JSON.parse(ajax.responseText); } } ajax.open("POST", "https://bluem.top/biliReply/", true); ajax.setRequestHeader("content-type","application/x-www-form-urlencoded"); ajax.send("type=setName&userUID=" + thisUserUID + "&userName=" + thisUserName); }//设置名字 function hideListReply(list){ for(let i = 0; i < replyItemArr.length; i += 1){ replyItemArr[i].hidden = false; } hideReplyUIDArr = []; hideReplyContentArr = []; for(let each of list){ let uid = each.uid; let content = each.content; hideReplyUIDArr.push(uid); hideReplyContentArr.push(content); for(let i = 0; i < replyItemArr.length; i += 1){ if(replyUIDArr[i] == uid && replyContentArr[i] == content){ replyItemArr[i].hidden = true; } } } }//隐藏列表对应的评论 function updateHide(){ for(let i = 0; i < replyItemArr.length; i += 1){ replyItemArr[i].hidden = false; } for(let i = 0; i < hideReplyUIDArr.length; i += 1){ let uid = hideReplyUIDArr[i]; let content = hideReplyContentArr[i]; for(let i = 0; i < replyItemArr.length; i += 1){ if(replyUIDArr[i] == uid && replyContentArr[i] == content){ replyItemArr[i].hidden = true; } } } } function addMyBtns(replyInfo){ let innerHTML = `
` let newDiv = document.createElement("bluem") newDiv.setAttribute("class", "bluemNemReplyBlock"); newDiv.innerHTML = innerHTML; replyInfo.append(newDiv); }//添加自定义按钮 function addClickEvent(id){ replyAgreeBtnArr[replyNum].onclick = ()=>{clickAgree(id)}; replyDisagreeBtnArr[replyNum].onclick = ()=>{clickDisagree(id)}; replyHateBtnArr[replyNum].onclick = ()=>{clickHate(id)}; }//添加点击事件 function clickAgree(id){ let flagNum = "1"; if(replyAgreeBtnArr[id].style.color == "white"){ flagNum = "-1"; replyAgreeBtnArr[id].style.color = "skyblue"; replyAgreeBtnArr[id].style.backgroundColor = "white"; } else{ if(replyDisagreeBtnArr[id].style.color == "white"){ clickDisagree(id); } replyAgreeBtnArr[id].style.color = "white"; replyAgreeBtnArr[id].style.backgroundColor = "skyblue"; } let ajax = new XMLHttpRequest(); ajax.onreadystatechange = () => { if(ajax.readyState === 4 && ajax.status === 200){ let json = JSON.parse(ajax.responseText); } } ajax.open("POST", "https://bluem.top/biliReply/", true); ajax.setRequestHeader("content-type","application/x-www-form-urlencoded"); ajax.send("type=agree" + "&BV=" + thisBV + "&replyUID=" + replyUIDArr[id] + "&replyUserName=" + replyUserNameArr[id] + "&replyContent=" + replyContentArr[id] + "&biliLike=" + replyLikeArr[id] + "&num=" + flagNum + "&userUID=" + thisUserUID ); }//点击认同 function clickDisagree(id){ let flagNum = "1"; if(replyDisagreeBtnArr[id].style.color == "white"){ flagNum = "-1"; replyDisagreeBtnArr[id].style.color = "red"; replyDisagreeBtnArr[id].style.backgroundColor = "white"; } else{ if(replyAgreeBtnArr[id].style.color == "white"){ clickAgree(id); } replyDisagreeBtnArr[id].style.color = "white"; replyDisagreeBtnArr[id].style.backgroundColor = "red"; } let ajax = new XMLHttpRequest(); ajax.onreadystatechange = () => { if(ajax.readyState === 4 && ajax.status === 200){ let json = JSON.parse(ajax.responseText); } } ajax.open("POST", "https://bluem.top/biliReply/", true); ajax.setRequestHeader("content-type","application/x-www-form-urlencoded"); ajax.send("type=disagree" + "&BV=" + thisBV + "&replyUID=" + replyUIDArr[id] + "&replyUserName=" + replyUserNameArr[id] + "&replyContent=" + replyContentArr[id] + "&biliLike=" + replyLikeArr[id] + "&num=" + flagNum + "&userUID=" + thisUserUID ); }//点击反对 function clickHate(id){ replyItemArr[id].hidden = true; if(thisUserName){return} let ajax = new XMLHttpRequest(); ajax.onreadystatechange = () => { if(ajax.readyState === 4 && ajax.status === 200){ let json = JSON.parse(ajax.responseText); } } ajax.open("POST", "https://bluem.top/biliReply/", true); ajax.setRequestHeader("content-type","application/x-www-form-urlencoded"); ajax.send("type=hate" + "&BV=" + thisBV + "&replyUID=" + replyUIDArr[id] + "&replyUserName=" + replyUserNameArr[id] + "&replyContent=" + replyContentArr[id] + "&biliLike=" + replyLikeArr[id] + "&userUID=" + thisUserUID ); }//点击不想看到 function changeReplyContentInner(txt){ let ans = txt .replace("", "") .replace(//g, "") .replace(/<\/i>/g, "") .replace("置顶", "") .replace(/]\">/g, "]") .replace(//g, "") .replace(/回复 @.* :/g, "回复 :"); return ans; }//缩减回复的具体内容 function checkIfAddMyBtns(replyInfo){ return replyInfo.innerHTML.substr(replyInfo.innerHTML.lastIndexOf(" { if(ajax.readyState === 4 && ajax.status === 200){ let json = JSON.parse(ajax.responseText) console.log(json); } } ajax.open("POST", "https://bluem.top/biliReply/", true); ajax.setRequestHeader("content-type","application/x-www-form-urlencoded"); ajax.send("type=showTable"); }//获取现有表格 })();