// ==UserScript== // @name 哔哩哔哩推荐- // @namespace http://tampermonkey.net/ // @version 0.1 // @description 哔哩哔哩推荐模块 // @author You // @match https://*.bilibili.com/* // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant none // @downloadURL none // ==/UserScript== (function() { 'use strict'; /** * 秒 转 可阅读的时长 * @param secondDuration */ function utilSecond2StrChinese(secondDuration = 0) { let day = Math.floor(secondDuration / (60 * 60 * 24)); secondDuration -= day * (60 * 60 * 24); let hour = Math.floor(secondDuration / (60 * 60)); secondDuration -= hour * (60 * 60); let minute = Math.floor(secondDuration / (60)); secondDuration -= minute * (60); return (day ? day + '天' : '') + (hour ? hour + '时' : '') + (minute ? minute + '分' : '') + (secondDuration ? secondDuration + '秒' : ''); } /** * 播放量 转 几万播放量 * @param secondDuration */ function utilPlayTimes2TenThousands(playTimes = 0) { if (playTimes < 10000) { return playTimes; } return (playTimes / 10000).toFixed(1) + '万'; } /*时间(今年的没年份)*/ function utilDate2Str(date) { let curDate = new Date(); return !date ? '' : (date.getFullYear() === curDate.getFullYear() ? '' : date.getFullYear() + '年') + (date.getMonth() + 1) + '月' + date.getDate() + '日'; } let html = ` 推荐页 `; let style = ` ` let div = document.createElement('div'); document.body.append(div); div.innerHTML += html + style; function getVideoHtml(video) { if (document.querySelector('.recommend-video[videoId="'+video.id+'"]') != null) { return ``; } return `
${video.title.substring(0, 40)}
${utilPlayTimes2TenThousands(video.stat.view)}
${video.owner.name}
${utilSecond2StrChinese(video.duration)}
` } function eleCommendContent() { return document.querySelector('#my-bilibili-recommend .recommend-content'); } document.getElementById('open-my-recommend').onclick = document.getElementById('close-my-recommend').onclick = function () { let recommend = document.getElementById('my-bilibili-recommend'); if (recommend.style.display === 'none') { recommend.style.display = 'block'; document.documentElement.style.overflow = 'hidden'; if (containerTooLess()) { RestGetVideoList(); } } else { recommend.style.display = 'none'; document.documentElement.style.overflow = 'auto'; } }; document.getElementById('refresh-my-recommend').onclick = function () { eleCommendContent().innerHTML = ''; RestGetVideoList(); }; RestGetVideoList(); function RestGetVideoList() { let request = new XMLHttpRequest(); request.open('GET', 'https://api.bilibili.com/x/web-interface/index/top/rcmd?fresh_type=3&fresh=' + Math.random()); request.setRequestHeader("If-Modified-Since","0"); // 清除缓存 request.setRequestHeader('Content-Type', 'application/json'); request.withCredentials = true; // request.setRequestHeader('cookie', document.cookie); request.addEventListener('load', function () { let newHtml = ''; for (let video of JSON.parse(this.responseText).data.item) { newHtml += getVideoHtml(video); } eleCommendContent().innerHTML += newHtml; if (containerTooLess()) { RestGetVideoList() } }) request.send(); } document.getElementById('my-bilibili-recommend').onscroll = function (event) { let scrollTop = document.getElementById('my-bilibili-recommend').scrollTop; let height = document.getElementById('my-bilibili-recommend').clientHeight; let contentHeight = 0; for (let child of document.getElementById('my-bilibili-recommend').children) { contentHeight += child.clientHeight; } if (scrollTop + height + 50 >= contentHeight) { RestGetVideoList(); } }; function containerTooLess() { let height = document.getElementById('my-bilibili-recommend').clientHeight; let contentHeight = 0; for (let child of document.getElementById('my-bilibili-recommend').children) { contentHeight += child.clientHeight; if (contentHeight > height) { return false; } } return contentHeight < height; } // Your code here... })();