// ==UserScript== // @name B站动态首页展示所有正在直播列表 // @namespace http://tampermonkey.net/ // @version 0.2.3 // @description 直接在动态首页展示所有的正在直播名单,而不是默认10个 // @author tuntun // @match https://t.bilibili.com/* // @icon https://www.google.com/s2/favicons?domain=bilibili.com // @grant GM_addStyle // @license MIT // @downloadURL none // ==/UserScript== (function () { 'use strict'; GM_addStyle(` .bili-dyn-live-users { max-height: calc(100vh - 276px); overflow-y: overlay; } .bili-dyn-live-users::-webkit-scrollbar { width: 10px; /*滚动条的宽度*/ height: 8px; /*滚动条的高度*/ opacity: 0; } .bili-dyn-live-users::-webkit-scrollbar-track-piece { background-color: #fff; /*滚动条的背景颜色*/ -webkit-border-radius: 0; /*滚动条的圆角宽度*/ opacity: 0; } .bili-dyn-live-users::-webkit-scrollbar-thumb { height: 50px; background-color: #ccc; -webkit-border-radius: 4px; outline: 2px solid #fff; outline-offset: -2px; border: 2px solid #fff; display: none; } .bili-dyn-live-users::-webkit-scrollbar-thumb:hover { background-color: #9f9f9f; } .bili-dyn-live-users:hover::-webkit-scrollbar-thumb { display: block; } .bili-dyn-live-users::-webkit-scrollbar-track { display: none; } .bili-dyn-live-users::-webkit-scrollbar-track-piece { display: none; } `) const API = { // 封装get方法 Get: async (props) => { const { url: baseUrl, params = {} } = props; let pStr = Object.keys(params).map((key) => { return `${key}=${params[key]}`; }).join('&'); let url = `${baseUrl}${pStr !== '' ? '?' : ''}${pStr}`; try { let res = await fetch(url, { credentials: "include" }); return (await res.json()).data; } catch (error) { console.error('Get Error', error); } }, // 通过关键词获取视频数据 getLiver: async (num = 0) => { try { let params = {}; if (num !== 0) { params = { size: num } } let res = await API.Get({ url: 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/w_live_users', params, }); return res; } catch (error) { console.log('getLiver', error); } }, getCard: async (mid) => { try { let res = await API.Get({ url: 'https://api.bilibili.com/x/web-interface/card', params: { mid, photo: 'true', }, }); return res; } catch (error) { console.log('getCard', error); } } } const Tool = { // 大数转万 formatBigNumber: (num) => { return num > 10000 ? `${(num / 10000).toFixed(2)}万` : num }, // 字符串转DOM s2d: (string) => { return new DOMParser().parseFromString(string, 'text/html').body .childNodes[0] }, } const getListItemTemplete = (prop) => { return `
${prop.uname}
${prop.title}
` } const getCardTemplete = async (params) => { const {mid, x, y} = params; let data = await API.getCard(mid); let card = data.card; return `
${card.official_verify.type !== -1 ? `
` : ''}

${card.name} 年度大会员

bilibili个人认证:bilibili 直播高能主播

${card.sign}

` } const init = async () => { let firstGet = await API.getLiver(); let liverNum = firstGet.count; if (liverNum > 10) { let liveUpListDom = document.querySelector('.bili-dyn-live-users__body'); if (liveUpListDom) { liveUpListDom.innerHTML = ''; let allLiver = await API.getLiver(liverNum); // let addLiverItem = allLiver.items.slice(10); allLiver.items.forEach(item => { if (liveUpListDom !== null) { liveUpListDom.appendChild(Tool.s2d(getListItemTemplete(item))); } }); document.querySelector('.bili-dyn-live-users__title span').innerHTML = `(${allLiver.items.length})` } } } const addRefleshBtn = () => { const header = document.querySelector('.bili-dyn-live-users__header'); const more = document.querySelector('.bili-dyn-live-users__more'); const refleshBtn = Tool.s2d(` `); try { header.insertBefore(refleshBtn, more); refleshBtn.addEventListener('click', async () => { refleshBtn.innerHTML = '正在刷新'; await init(); refleshBtn.innerHTML = '刷新'; }); refleshBtn.onmouseover = () => { refleshBtn.style.color = '#00a1d6'; } refleshBtn.onmouseout = () => { refleshBtn.style.color = '#99a2aa'; } } catch (error) { console.log(error); } } window.addEventListener( 'load', async () => { await init(); addRefleshBtn(); }, ) })();