B站评论区自动标注原神玩家,依据是动态里是否有原神相关内容(0.6一些小的修改)
< 腳本原神玩家指示器的回應
自己改了改,我的代码可以通过关注查询成分了,但是会和通过动态查询的结果共同显示在一起,所以不是最优解:
(function () { 'use strict'; const unknown = new Set() const yuanyou = new Set() const no_yuanyou = new Set() const keyword = "原神" // 可以自行修改,如"#原神","明日方舟" const keyword1 = "#绝区零#" const keyword2 = "#崩坏3#" const keyword3 = "#米哈游#" const keyword4 = "互动抽奖 #原神#" const tag = " |原神玩家|" const tag2 = " |设置隐私|" const blog = 'https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?&host_mid=' const follow = 'https://api.bilibili.com/x/relation/followings?vmid=' const pageNumInHttp = "&pn=" let pageNum = 1 //页数取最大值(可设可不设) const pageSizeNum = 50 const pageSize = '&ps=' + pageSizeNum //要检测的被关注账号id,该变量亦可用set实现 const scan_follow = [27534330, 401742377] let is_yuanyou = false; const is_new = document.getElementsByClassName('item goback').length != 0 // 检测是不是新版 const get_pid = (c) => { if (is_new) { return c.dataset['userId'] } else { return c.children[0]['href'].replace(/[^\d]/g, "") } } const get_comment_list = () => { if (is_new) { let lst = new Set() for (let c of document.getElementsByClassName('user-name')) { lst.add(c) } for (let c of document.getElementsByClassName('sub-user-name')) { lst.add(c) } return lst } else { return document.getElementsByClassName('user') } } //console.log(is_new) console.log("正常加载") let jiance = setInterval(() => { let commentlist = get_comment_list() if (commentlist.length != 0) { // clearInterval(jiance) commentlist.forEach(c => { let pid = get_pid(c) if (yuanyou.has(pid)) { return } else if (no_yuanyou.has(pid)) { // do nothing return } unknown.add(pid) //console.log(pid) let blogurl = blog + pid //查询用户的关注列表 let followurl = follow + pid + pageNumInHttp + pageNum + pageSize //创建关注者列表 let followList = []; // let xhr = new XMLHttpRequest() GM_xmlhttpRequest({ method: "get", url: blogurl, data: '', headers: { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36' }, onload: function (res) { if (res.status === 200) { //console.log('成功') let st = JSON.stringify(JSON.parse(res.response).data) unknown.delete(pid) if (st.includes(keyword) || st.includes(keyword1) || st.includes(keyword2) || st.includes(keyword3) || st.includes(keyword4)) { c.append(tag) yuanyou.add(pid) is_yuanyou = true } else { no_yuanyou.add(pid) } } else { console.log('失败') } }, }); //发送跨域请求 GM_xmlhttpRequest({ method: "get", url: followurl, data: '', headers: { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36' }, onload: function (res) { //console.log(is_yuanyou) //转换为json格式方便判断 let st = JSON.parse(res.response) let totalPage = 1 if (st.code == 0) { //计算共有多少页,B站限制最多查询前250个关注 let totalPage = st.data.total / pageSizeNum > 5 ? 5 : Math.ceil(st.data.total / pageSizeNum); //console.log('页数'+totalPage) //将结果存入数组 followList = st.data.list //判断身份 is_yuanyou = yuanyou.has(pid) //console.log(yuanyou) //遍历json数据 if (!is_yuanyou) { for (let i = 0; i < scan_follow.length; i++) { for (let j = 0; j < followList.length; j++) { if (scan_follow[i] == followList[j].mid) { // console.log(followList[j].mid) c.append(tag) yuanyou.add(pid) is_yuanyou = true break } } if (is_yuanyou) { break } } } if (!is_yuanyou) { //向后翻页 for (let i = 2; i < totalPage; i++) { let temp_followurl = follow + pid + pageNumInHttp + i + pageSize GM_xmlhttpRequest({ method: "get", url: temp_followurl, data: '', headers: { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36' }, onload: function (res) { let st = JSON.parse(res.response) if (st.code == 0) { //将结果存入数组 followList = st.data.list //遍历json数据 for (let i = 0; i < scan_follow.length; i++) { for (let j = 0; j < followList.length; j++) { if (scan_follow[i] == followList[j].mid) { c.append(tag) yuanyou.add(pid) is_yuanyou = true break } } if (is_yuanyou) { break } } } } }) if (is_yuanyou) { break } } } if (!is_yuanyou) { no_yuanyou.add(pid) } //console.log(followList) } else { c.append(tag2) //console.log(pid + '设置了隐私') } }, }); //关注星瞳_offical送溜溜梅 关注星瞳_offical送溜溜梅 https://space.bilibili.com/401315430 }); } }, 4000)})();
登入以回復
自己改了改,我的代码可以通过关注查询成分了,但是会和通过动态查询的结果共同显示在一起,所以不是最优解: