B站评论区根据关注列表查成分

B站评论区自动标注三相玩家,依据关注列表中可查看的部分(修改自三相之力)

  1. // ==UserScript==
  2. // @name B站评论区根据关注列表查成分
  3. // @namespace 4pp13
  4. // @version 0.3
  5. // @description B站评论区自动标注三相玩家,依据关注列表中可查看的部分(修改自三相之力)
  6. // @author xulaupuz&4pp13
  7. // @match https://www.bilibili.com/video/*
  8. // @match https://t.bilibili.com/*
  9. // @match https://space.bilibili.com/*
  10. // @match https://space.bilibili.com/*
  11. // @match https://www.bilibili.com/read/*
  12. // @icon https://static.hdslb.com/images/favicon.ico
  13. // @connect bilibili.com
  14. // @grant GM_xmlhttpRequest
  15. // @license MIT
  16. // @run-at document-end
  17. // ==/UserScript==
  18.  
  19. (function () {
  20. 'use strict';
  21.  
  22. //保存成分
  23. const pid_dic = {}
  24.  
  25. //关键词 标签 标签颜色 (可自定义扩展)
  26. const keyword_and_tag = {
  27. "隐藏": { tag: "【隐藏】", color: "#254680"},
  28. "纯良": { tag: " 【纯良】", color: "#11DD77"},
  29. //以下可增改
  30. "原神": { tag: " 【原】", color: "#6600CC"},
  31. "明日方舟": { tag: " 【舟】", color: "#6600CC"},
  32. "王者荣耀": {tag: " 【农】", color: "#6600CC"},
  33. }
  34.  
  35. const follow = 'https://api.bilibili.com/x/relation/stat?vmid='
  36. const is_new = document.getElementsByClassName('item goback').length != 0 // 检测是不是新版
  37.  
  38. const get_pid = (c) => {
  39. if (is_new) {
  40. return c.dataset['userId']
  41. } else {
  42. return c.children[0]['href'].replace(/[^\d]/g, "")
  43. }
  44. }
  45.  
  46. const get_comment_list = () => {
  47. if (is_new) {
  48. let lst = new Set()
  49. for (let c of document.getElementsByClassName('user-name')) {
  50. lst.add(c)
  51. }
  52. for (let c of document.getElementsByClassName('sub-user-name')) {
  53. lst.add(c)
  54. }
  55. return lst
  56. } else {
  57. return document.getElementsByClassName('user')
  58. }
  59. }
  60.  
  61. const update_tag = (pid, st) => {
  62. for(var key in keyword_and_tag){
  63. if(key == "隐藏" || key == "纯良" || pid_dic[pid].tag.has(key.tag)) continue
  64. if(st.includes(key))
  65. {
  66. let s = "<b style='color: " + keyword_and_tag[key].color + "'>" + keyword_and_tag[key].tag + "</b>"
  67. pid_dic[pid].tag.add(s)
  68. }
  69. }
  70. }
  71.  
  72. const show_tag = (pid, c) => {
  73. let string = pid_dic[pid].uname
  74. if(pid_dic[pid].tag.size == 0) c.innerHTML = string + "<b style='color: #000000'>【查找中:" + Math.floor(pid_dic[pid].pn * 100 / 14) + "%】</b>"
  75. else
  76. {
  77. pid_dic[pid].tag.forEach(t => {
  78. string += t
  79. })
  80. c.innerHTML = string
  81. }
  82. }
  83.  
  84. console.log(is_new)
  85. console.log("正常加载")
  86. let jiance = setInterval(() => {
  87. let commentlist = get_comment_list()
  88. if (commentlist.length != 0) {
  89. commentlist.forEach(c => {
  90. let pid = get_pid(c)
  91.  
  92. if(!pid_dic[pid]) pid_dic[pid] = { uname: c.innerHTML, pn: 0, tag: new Set()} //初始化
  93.  
  94. let searchurl
  95. if(pid_dic[pid].pn == -1)
  96. {
  97. show_tag(pid, c)
  98. return;
  99. }
  100. if(pid_dic[pid].pn < 6) searchurl ='https://api.bilibili.com/x/relation/followings?vmid=' + pid + '&pn=' + (pid_dic[pid].pn++) + '&ps=50&order=desc&&jsonp=jsonp'
  101. else if(pid_dic[pid].pn < 13) searchurl ='https://api.bilibili.com/x/relation/followings?vmid=' + pid + '&pn=' + ((pid_dic[pid].pn++) % 6) + '&ps=50&order=asc&&jsonp=jsonp'
  102. else if(pid_dic[pid].pn >= 13 && pid_dic[pid].tag.size == 0)
  103. {
  104. //查找完毕,标记为纯良
  105. let s = "<b style='color: " + keyword_and_tag["纯良"].color + "'>" + keyword_and_tag["纯良"].tag + "</b>"
  106. pid_dic[pid].tag.add(s)
  107. pid_dic[pid].pn = -1
  108. show_tag(pid, c)
  109. return
  110. }
  111. GM_xmlhttpRequest({
  112. method: "get",
  113. url: searchurl,
  114. data: '',
  115. headers: {
  116. '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'
  117. },
  118. onload: function (res) {
  119. if (res.status === 200){
  120. let r = JSON.parse(res.response)
  121. if(r.code == 22115){
  122. //隐藏关注列表
  123. pid_dic[pid].pn = -1
  124. let s = "<b style='color: " + keyword_and_tag["隐藏"].color + "'>" + keyword_and_tag["隐藏"].tag + "</b>"
  125. pid_dic[pid].tag.clear()
  126. pid_dic[pid].tag.add(s)
  127. show_tag(pid, c)
  128. return
  129. }
  130. /*
  131. else if(r.code == 22007){
  132. //超页
  133. pid_dic[pid].pn = 13
  134. }
  135. */
  136. else{
  137. let u = r.data.list
  138.  
  139. if(u.length < 50)
  140. {
  141. pid_dic[pid].pn = 13
  142. }
  143. for(let j = 0; j < u.length; j++){
  144. let st = u[j].uname
  145.  
  146. //更新标签
  147. update_tag(pid, st)
  148. /*
  149. //添加原神标签
  150. if (st.includes(keyword_yuan) && !yuanyou.has(pid)) {
  151. c.innerHTML += tag_yuan_Inner
  152. yuanyou.add(pid)
  153. }
  154. //添加方舟标签
  155. if (st.includes(keyword_zhou) && !zhouyou.has(pid)) {
  156. zhouyou.add(pid)
  157. }
  158. //添加农药标签
  159. if (st.includes(keyword_nong) && !nongyou.has(pid)) {
  160. nongyou.add(pid)
  161. }
  162. */
  163. }
  164. show_tag(pid, c)
  165. }
  166.  
  167.  
  168. } else {
  169. console.log('失败')
  170. //console.log(res)
  171. c.innerHTML = pid_dic[pid].uname + "<b style='color: #000000'>【成分查太多了,B站暂时不准你查】</b>"
  172. clearInterval(jiance)
  173. }
  174. }
  175.  
  176. })
  177. });
  178. }
  179. }, 5000)
  180. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址