bilibili查看关注时间,只限关注列表的全部关注生效,增加关注页面,增加web手机页面(这种https://m.bilibili.com/space/4176573)。优化未关注的,和自己页面的显示
// ==UserScript== // @name bilibili查看关注时间 // @namespace http://tampermonkey.net/ // @version 0.5 // @description bilibili查看关注时间,只限关注列表的全部关注生效,增加关注页面,增加web手机页面(这种https://m.bilibili.com/space/4176573)。优化未关注的,和自己页面的显示 // @author YuNi_Vsinger // @match https://space.bilibili.com/* // @match https://m.bilibili.com/* // @icon https://www.bilibili.com/favicon.ico // @grant GM_xmlhttpRequest // @connect * // @license MIT // ==/UserScript== (function () { 'use strict'; // https://api.bilibili.com/x/space/acc/relation?mid= window.onload = function () { let currentUrl = window.location.href; if (currentUrl.includes('/fans/')) { setInterval(() => { let ulElement = document.querySelector('.be-pager-item-active'); let active = document.querySelector('.follow-tabs .active'); // console.log('active:', active.textContent); let userId = currentUrl.match(/(?<=space\.bilibili\.com\/)\d+/)[0]; let url = `https://api.bilibili.com/x/relation/followings?vmid=${userId}&pn=${ulElement.textContent}&ps=20&order=desc&order_type=attention` if (active.textContent == '最近关注') { url = `https://api.bilibili.com/x/relation/followings?vmid=${userId}&pn=${ulElement.textContent}&ps=20&order=desc&order_type=` } getList(url) }, 1000); } else if (currentUrl.includes('m.bilibili.com/space')) { // console.log('手机端:', currentUrl); const regex = /\/(\d+)(\?|\/|$)/; const matches = currentUrl.match(regex); if (matches && matches.length >= 2) { let userId = matches[1]; // console.log('userId:', userId); let url = `https://api.bilibili.com/x/space/acc/relation?mid=${userId}` getOne(url) } } else { // console.log('currentUrl:', currentUrl); const regex = /\/(\d+)(\?|\/|$)/; const matches = currentUrl.match(regex); if (matches && matches.length >= 2) { let userId = matches[1]; // console.log('userId:', userId); let url = `https://api.bilibili.com/x/space/acc/relation?mid=${userId}` getOne(url) } } } function getList (url) { GM_xmlhttpRequest({ method: 'get', headers: { "Content-Type": "text/plain", }, data: url, url: url, onload: (r) => { // console.log("GM_xmlhttpRequest", r.response); let response = JSON.parse(r.response); // console.log("response", response.data.list); let list = response.data.list // 查找 class 为 .fans-name 的元素 let elements = document.getElementsByClassName('fans-name'); list.forEach(element => { // 遍历每个元素 for (let i = 0; i < elements.length; i++) { let e = elements[i]; if (e.textContent === element.uname) { // 找到满足条件的元素 e.textContent = e.textContent + "[" + timestamptoDate(element.mtime) + "]"; } } }); }, }) } function getOne (url) { GM_xmlhttpRequest({ method: 'get', headers: { "Content-Type": "text/plain", }, data: url, url: url, onload: (r) => { // console.log('r:', r); let response = JSON.parse(r.response); // console.log('response:', response); let element = document.getElementById('h-name'); if(!element){ element = document.getElementsByClassName('name')[0]; } if(response.data.relation.mtime && response.data.relation.mtime>0){ element.textContent = element.textContent + "[" + timestamptoDate(response.data.relation.mtime) + "]"; } }, }) } function timestamptoDate (timestamp) { var timestampInMillis = timestamp * 1000; // 使用 Date 对象创建一个新的日期实例,并传入毫秒级时间戳作为参数 var date = new Date(timestampInMillis); // console.log('date:', date); // 使用 Date 对象提供的各种方法获取年、月、日、小时、分钟、秒等信息 var year = date.getFullYear(); // 获取年份 var month = date.getMonth() + 1; // 获取月份(注意月份从 0 开始,所以要加 1) var day = date.getDate(); // 获取日期 var hours = date.getHours(); // 获取小时 var minutes = date.getMinutes(); // 获取分钟 var seconds = date.getSeconds(); // 获取秒数 // 使用获取到的各个时间部分拼接成最终的时间字符串 return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds; } })();