bilibili按关注分组分类显示动态

按关注分组分类显示动态

// ==UserScript==
// @name         bilibili按关注分组分类显示动态
// @description  按关注分组分类显示动态
// @namespace    http://tampermonkey.net/
// @version      0.1.0
// @author       GZ2000COM
// @match        https://t.bilibili.com/*
// @match        https://space.bilibili.com/*/fans/follow*
// @icon         https://www.bilibili.com//favicon.ico
// @connect      api.bilibili.com
// @license     MIT
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    // 判断当前页面是否是https://t.bilibili.com/*页面
    if (window.location.href.startsWith('https://t.bilibili.com/')) {
        // 等待页面加载完成
        window.addEventListener('load', function () {
            // 查找并移除一些页面初始元素(根据实际需求调整选择器)
            var element1 = document.querySelector('.left');
            var element2 = document.querySelector('.right');
            var element3 = document.querySelector('.bili-dyn-sidebar');
            var element4 = document.querySelector('.bili-dyn-home--member main section:first-of-type');

            if (element1) {
                element1.parentNode.removeChild(element1);
            }

            if (element2) {
                element2.parentNode.removeChild(element2);
            }

            if (element3) {
                element3.parentNode.removeChild(element3);
            }

            if (element4) {
                element4.parentNode.removeChild(element4);
            }

            // 选择要修改宽度的元素
            var mainElement = document.getElementsByTagName('main')[0];
            if (mainElement) {
                // 修改元素宽度
                mainElement.style.width = '60%';
            }

            // 获取所有具有.link-class类名的元素(here assume the class name is correct, may need to adjust in reality)
            var elements = document.querySelectorAll('.header-entry-mini');
            var uid;
            if (elements.length > 0) {
                var href = elements[0].getAttribute('href');
                if (href && href.startsWith('//space.bilibili.com/')) {
                    uid = href.split('/')[3];
                }
            }

            // 构造要请求的URL,使用获取到的用户UID
            var targetUrl = 'https://space.bilibili.com/' + uid + '/fans/follow';
                        // 创建新元素(例如用div作为示例,可根据实际需求调整元素类型)
            var newElement = document.createElement('div');
            newElement.classList.add('bili-dyn-list-tabs'); // 添加和已有元素类似的类名,尝试获取相似样式
            // 初始设置元素隐藏滚动条样式,后续通过JavaScript控制显示
            newElement.style.overflowX = 'hidden';
            newElement.style.whiteSpace = 'nowrap';
            newElement.style.margin = '10px 0';
            // 添加鼠标进入和离开事件监听器来控制滚动条的显示和隐藏
            newElement.addEventListener('mouseenter', function () {
                this.style.overflowX = 'scroll';
            });
            newElement.addEventListener('mouseleave', function () {
                this.style.overflowX = 'hidden';
            });

            // 创建第一个子元素div(类名为bili-dyn-list-tabs__list)
            var listDiv = document.createElement('div');
            listDiv.classList.add('bili-dyn-list-tabs__list');

            // 创建用于分组名的子元素(以div包裹span为例,结构更清晰,方便后续样式及交互设置)
            var groupAllDiv = document.createElement('div');
            groupAllDiv.classList.add('bili-dyn-list-tabs__item', 'fs-medium');
            groupAllDiv.textContent = '全部关注';
            groupAllDiv.addEventListener('click', function () {
                // 先移除所有同类元素的active类名
                var items = document.querySelectorAll('.bili-dyn-list-tabs__item.fs-medium');
                items.forEach(function (item) {
                    item.classList.remove('active');
                });
                // 给当前点击元素添加active类名
                this.classList.add('active');
                // 显示全部相关元素(class为bili-dyn-list-tabs的div和所有section)
                var main = document.getElementsByTagName('main')[0];
                var biliDynListTabs = main.querySelector('.bili-dyn-list-tabs');
                var sections = main.querySelectorAll('section');
                biliDynListTabs.style.display = 'block';
            });

            // 后续创建分组元素相关逻辑移动到函数中方便复用
            function createGroupDiv(title, listDiv) {
                var groupDiv = document.createElement('div');
                groupDiv.classList.add('bili-dyn-list-tabs__item', 'fs-medium');
                groupDiv.textContent = title;
                groupDiv.addEventListener('click', function () {
                    var items = document.querySelectorAll('.bili-dyn-list-tabs__item.fs-medium');
                    items.forEach(function (item) {
                        item.classList.remove('active');
                    });
                    this.classList.add('active');
                    // 隐藏除了对应tagid的section之外的其他section元素
                    var main = document.getElementsByTagName('main')[0];
                    var sections = main.querySelectorAll('section');
                    sections.forEach(function (section) {
                        if (section.getAttribute('tagid')!== title) {
                            section.style.display = 'none';
                        } else {
                            section.style.display = 'block';
                        }
                    });
                });
                listDiv.appendChild(groupDiv);
                return groupDiv;
            }

            // 创建分组元素,先默认添加全部关注、特别关注、默认分组三个基本分组元素
            var groupSpecialDiv = createGroupDiv('特别关注', listDiv);
            var groupDefaultDiv = createGroupDiv('默认分组', listDiv);
                        // 创建粘贴结果按钮的点击事件逻辑修改,用于更新分组元素
            var pasteButton = document.createElement('button');
            pasteButton.textContent = '粘贴结果';
            pasteButton.style.marginTop = '20px';
            pasteButton.style.padding = '10px 20px';
            pasteButton.style.backgroundColor = '#4CAF50';
            pasteButton.style.color = '#ffffff';
            pasteButton.style.border = 'none';
            pasteButton.style.borderRadius = '6px';
            pasteButton.style.cursor = 'pointer';
            pasteButton.style.fontFamily = '华文楷体';
            pasteButton.style.fontSize = '18px';
            pasteButton.style.transition = 'background-color 0.3s ease, box-shadow 0.3s ease';
            pasteButton.addEventListener('click', function () {
                navigator.clipboard.readText().then(function (text) {
                    if (text) {
                        let newLines = text.split('\n');
                        let newTitles = [];
                        newLines.forEach(line => {
                            let parts = line.split(', ');
                            if (parts.length >= 2) {
                                let title = parts[1].split(': ')[1];
                                newTitles.push(title);
                            }
                        });
                        if (newTitles.length > 0) {
                            // 替换现有分组文本内容(先移除旧的分组元素)
                            listDiv.innerHTML = '';
                            groupAllDiv = createGroupDiv('全部关注', listDiv);
                            groupSpecialDiv = createGroupDiv(newTitles[0], listDiv);
                            groupDefaultDiv = createGroupDiv(newTitles[1], listDiv);
                            for (let i = 2; i < newTitles.length; i++) {
                                createGroupDiv(newTitles[i], listDiv);
                            }
                            groupAllDiv.classList.add('active');

                            // 在main元素中根据分组名创建对应的section元素,并设置tagid属性
                            var main = document.getElementsByTagName('main')[0];
                            newTitles.forEach(title => {
                                if (title!== '全部关注') {  // 除了"全部关注"分组外创建section元素
                                    var section = document.createElement('section');
                                    section.classList.add('bili-dyn-list__items');
                                    section.setAttribute('tagid', title);
                                    main.appendChild(section);
                                }
                            });
                        } else {
                            console.error('解析到的分组标题列表为空,无法更新分组元素');
                        }
                    } else {
                        console.error('从剪贴板读取的内容为空');
                    }
                }).catch(function (err) {
                    console.error('读取剪贴板内容出错:', err);
                });
            });

            // 继续添加其他基本分组元素到listDiv
            listDiv.appendChild(groupAllDiv);
            listDiv.appendChild(groupSpecialDiv);
            listDiv.appendChild(groupDefaultDiv);

            // 默认让第一个分组名元素(全部关注)添加active类名
            groupAllDiv.classList.add('active');

            // 将两个子元素添加到新Element中
            newElement.appendChild(listDiv);
                        // 找到目标父元素(.bili-dyn-home--member main)
            var targetParent = document.querySelector('.bili-dyn-home--member main');
            if (targetParent) {
                // 获取目标父元素的第一个子元素(如果有的话)
                var firstChild = targetParent.firstChild;
                // 将新Element插入到目标父元素的第一个位置
                targetParent.insertBefore(newElement, firstChild);
            }

            // 以下是新增代码,用于添加tagid属性
        var targetMain = document.querySelector('.bili-dyn-home--member main');
        if (targetMain) {
            var sections = targetMain.querySelectorAll('section');
            for (var i = 0; i < Math.min(2, sections.length); i++) {
                sections[i].setAttribute('tagid', '全部关注');
            }
        }

            // 创建提示框元素
            var tooltipDiv = document.createElement('div');
            tooltipDiv.style.position = 'fixed';
            tooltipDiv.style.top = '50%';
            tooltipDiv.style.left = '50%';
            tooltipDiv.style.transform = 'translate(-50%, -50%)';
            tooltipDiv.style.backgroundColor = '#ffffff';
            tooltipDiv.style.border = '1px solid #e0e0e0';
            tooltipDiv.style.padding = '20px';
            tooltipDiv.style.zIndex = '9999';
            tooltipDiv.style.width = '360px';
            tooltipDiv.style.borderRadius = '10px';
            tooltipDiv.style.boxShadow = '0 5px 15px rgba(0, 0, 0, 0.1)';
            tooltipDiv.style.textAlign = 'center';
            tooltipDiv.style.fontFamily = '微软雅黑';
            tooltipDiv.style.fontSize = '16px';
            tooltipDiv.style.display = 'flex';
            tooltipDiv.style.flexDirection = 'column';
            tooltipDiv.style.alignItems = 'center';

            // 创建提示内容段落元素
            var tooltipContent = document.createElement('p');
            tooltipContent.textContent = '为了更好地为您分类显示动态,脚本需要跳转到您的关注页,获取您在B站的关注分组等关键信息,请放心,该操作不会涉及任何隐私泄露或其他风险';
            tooltipContent.style.textAlign = 'justify';
            tooltipContent.style.fontFamily = '微软雅黑';
            tooltipContent.style.fontSize = '18px';
            tooltipContent.style.margin = '0 0 25px 0';
            tooltipContent.style.paddingTop = '15px';
            tooltipContent.style.color = '#555555';
            tooltipDiv.appendChild(tooltipContent);

            // 创建关闭按钮元素并设置样式使其为红色X并位于右上角
            var closeButton = document.createElement('span');
            closeButton.textContent = '×';
            closeButton.style.position = 'absolute';
            closeButton.style.top = '4px';
            closeButton.style.right = '18px';
            closeButton.style.color = '#ff5252';
            closeButton.style.cursor = 'pointer';
            closeButton.style.fontFamily = '微软雅黑';
            closeButton.style.fontSize = '24px';
            closeButton.style.transition = 'color 0.2s ease, transform 0.2s ease';
            closeButton.addEventListener('click', function () {
                tooltipDiv.parentNode.removeChild(tooltipDiv);
            });
            closeButton.onmouseover = function () {
                this.style.color = '#ff3b3b';
                this.style.transform = 'scale(1.1)';
            };
            closeButton.onmouseout = function () {
                this.style.color = '#ff5252';
                this.style.transform = 'scale(1)';
            };
            tooltipDiv.appendChild(closeButton);

            // 创建按钮容器,用于放置按钮,方便用 flex 布局管理间距
            var buttonContainer = document.createElement('div');
            buttonContainer.style.display = 'flex';
            buttonContainer.style.justifyContent = 'space-between';
            buttonContainer.style.width = '100%';

            // 创建打开关注页按钮元素并设置样式和链接地址
            var openButton = document.createElement('button');
            openButton.href = targetUrl;
            openButton.textContent = '打开关注页';
            openButton.style.marginTop = '20px';
            openButton.style.padding = '10px 20px';
            openButton.style.backgroundColor = '#3498db';
            openButton.style.color = '#ffffff';
            openButton.style.border = 'none';
            openButton.style.borderRadius = '6px';
            openButton.style.cursor = 'pointer';
            openButton.style.fontFamily = '华文楷体';
            openButton.style.fontSize = '18px';
            openButton.style.transition = 'background-color 0.3s ease, box-shadow 0.3s ease';
            openButton.addEventListener('click', function () {
                window.open(targetUrl, '_blank');
            });
            buttonContainer.appendChild(openButton);

            // 创建空白占位元素,模拟四个字的间距
            var spacer = document.createElement('span');
            spacer.style.width = '0px';
            buttonContainer.appendChild(spacer);

            // 将粘贴结果按钮添加到按钮容器
            buttonContainer.appendChild(pasteButton);

            // 将按钮容器添加到提示框中
            tooltipDiv.appendChild(buttonContainer);

            // 将提示框添加到页面主体元素中
            document.body.appendChild(tooltipDiv);

            // 将targetUrl输出到控制台
            console.log('用户关注页URL:', targetUrl);
             });


                } else if (window.location.href.startsWith('https://space.bilibili.com/')) {
        window.addEventListener('load', function () {
            console.log('页面已触发load事件,开始执行后续脚本逻辑');

            // 创建提示框元素
            var tooltipDiv = document.createElement('div');
            tooltipDiv.style.position = 'fixed';
            tooltipDiv.style.top = '50%';
            tooltipDiv.style.left = '50%';
            tooltipDiv.style.transform = 'translate(-50%, -50%)';
            tooltipDiv.style.backgroundColor = '#ffffff';
            tooltipDiv.style.border = '1px solid #e0e0e0';
            tooltipDiv.style.padding = '20px';
            tooltipDiv.style.zIndex = '9999';
            tooltipDiv.style.width = '360px';
            tooltipDiv.style.borderRadius = '10px';
            tooltipDiv.style.boxShadow = '0 5px 15px rgba(0, 0, 0, 0.1)';
            tooltipDiv.style.textAlign = 'center';
            tooltipDiv.style.fontFamily = '微软雅黑';

            // 创建提示内容段落元素
            var tooltipContent = document.createElement('p');
            tooltipContent.textContent = '已获取到关注分组等相关信息,点击复制结果,返回动态页点击粘贴结果便成功执行动态分组显示脚本';
            tooltipContent.style.textAlign = 'justify';
            tooltipContent.style.fontFamily = '微软雅黑';
            tooltipContent.style.fontSize = '18px';
            tooltipContent.style.margin = '0 0 25px 0';
            tooltipContent.style.paddingTop = '15px';
            tooltipContent.style.color = '#555555';
            tooltipDiv.appendChild(tooltipContent);

            // 创建关闭按钮元素并设置样式使其为红色X并位于右上角
            var closeButton = document.createElement('span');
            closeButton.textContent = '×';
            closeButton.style.position = 'absolute';
            closeButton.style.top = '4px';
            closeButton.style.right = '18px';
            closeButton.style.color = '#ff5252';
            closeButton.style.cursor = 'pointer';
            closeButton.style.fontFamily = '微软雅黑';
            closeButton.style.fontSize = '24px';
            closeButton.style.transition = 'color 0.2s ease, transform 0.2s ease';
            closeButton.addEventListener('click', function () {
                tooltipDiv.parentNode.removeChild(tooltipDiv);
            });
            closeButton.onmouseover = function () {
                this.style.color = '#ff3b3b';
                this.style.transform = 'scale(1.1)';
            };
            closeButton.onmouseout = function () {
                this.style.color = '#ff5252';
                this.style.transform = 'scale(1)';
            };
            tooltipDiv.appendChild(closeButton);

            // 创建复制结果按钮元素并设置样式
            var copyButton = document.createElement('button');
            copyButton.textContent = '复制结果';
            copyButton.style.marginTop = '20px';
            copyButton.style.padding = '10px 20px';
            copyButton.style.backgroundColor = '#4CAF50';
            copyButton.style.color = '#ffffff';
            copyButton.style.border = 'none';
            copyButton.style.borderRadius = '6px';
            copyButton.style.cursor = 'pointer';
            copyButton.style.fontFamily = '华文楷体';
            copyButton.style.fontSize = '18px';
            copyButton.style.transition = 'background-color 0.3s ease, box-shadow 0.3s ease';
            copyButton.addEventListener('click', function () {
                var result = "";
                var liElements = document.querySelectorAll('li.follow-item');
                for (var i = 0; i < liElements.length; i++) {
                    var tagid = liElements[i].getAttribute('tagid');
                    var aElement = liElements[i].querySelector('a');
                    var title = aElement? aElement.title : null;
                    if (tagid && title) {
                        result += "tagid: " + tagid + ", title: " + title + "\n";
                    }
                }
                // 创建临时文本区域元素用于复制内容到剪贴板
                var textarea = document.createElement('textarea');
                textarea.value = result;
                document.body.appendChild(textarea);
                textarea.select();
                document.execCommand('copy');
                document.body.removeChild(textarea);
                console.log('已复制结果到剪贴板');
            });
            tooltipDiv.appendChild(copyButton);

            // 将提示框添加到页面主体元素中
            document.body.appendChild(tooltipDiv);

            setTimeout(function () {
                var liElements = document.querySelectorAll('li.follow-item');
                console.log('获取到的li元素数量:', liElements.length);
                for (var i = 0; i < liElements.length; i++) {
                    var tagid = liElements[i].getAttribute('tagid');
                    var aElement = liElements[i].querySelector('a');
                    var title = aElement? aElement.title : null;
                    if (tagid && title) {
                        console.log('tagid:', tagid, 'title:', title);
                    }
                }
            }, 3000);
        });
    }
})();

QingJ © 2025

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