您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
show voiced characters that are from subjects in your collections
当前为
// ==UserScript== // @name CharWhoIWouldveknow // @namespace https://jirehlov.com // @version 0.2.1 // @description show voiced characters that are from subjects in your collections // @author Jirehlov // @include /^https?:\/\/(bgm\.tv|bangumi\.tv|chii\.in)\/person\/\d+\/works\/voice+/ // @grant none // @license MIT // ==/UserScript== (function () { let collectStatus = {}; const limit = 50; let guess = 1000000; let totalItems = 0; let allData = []; let username = null; let updatingData = false; let getLi = null; if (localStorage.getItem('bangumi_subject_collectStatus')) { collectStatus = JSON.parse(localStorage.getItem('bangumi_subject_collectStatus')); } const idBadgerNeue = document.querySelector('.idBadgerNeue'); if (idBadgerNeue) { const avatarLink = idBadgerNeue.querySelector('.avatar'); if (avatarLink) { const href = avatarLink.getAttribute('href'); username = href.substring(href.lastIndexOf('/') + 1); } } let subject_type = [ 1, 2, 3, 4, 6 ]; let collection_type = [ 1, 2, 3, 4, 5 ]; let subject_type_index = 0; function isSubjectCollected(subjectId) { return collectStatus[subjectId] === 'collect'; } function checkCharactersInPage(isCollected, notCollected) { const browserListItems = document.querySelectorAll('.browserList li'); browserListItems.forEach(item => { const innerRightList = item.querySelector('.innerRightList.rr'); if (innerRightList) { const clearitItem = innerRightList.querySelector('li.clearit'); if (clearitItem) { const aElement = clearitItem.querySelector('a'); if (aElement) { const href = aElement.getAttribute('href'); const subjectIdMatch = href.match(/\/subject\/(\d+)/); if (subjectIdMatch) { const subjectId = subjectIdMatch[1]; if (isSubjectCollected(subjectId)) { if (isCollected) { item.style.display = 'block'; } else { item.style.display = 'none'; } } else { if (notCollected) { item.style.display = 'block'; } else { item.style.display = 'none'; } } } } } } }); } function createFilterButtons() { const subjectFilterElement = document.querySelector('.subjectFilter'); if (subjectFilterElement) { const groupedUL = document.createElement('ul'); groupedUL.className = 'grouped clearit'; const titleLi = document.createElement('li'); titleLi.classList.add('title'); titleLi.innerHTML = '<span>收藏状态</span>'; const collectedLi = document.createElement('li'); collectedLi.innerHTML = '<a href="javascript:;" class="l"><span>已收藏</span></a>'; collectedLi.addEventListener('click', () => { checkCharactersInPage(true, false); }); const notCollectedLi = document.createElement('li'); notCollectedLi.innerHTML = '<a href="javascript:;" class="l"><span>未收藏</span></a>'; notCollectedLi.addEventListener('click', () => { checkCharactersInPage(false, true); }); const allLi = document.createElement('li'); allLi.innerHTML = '<a href="javascript:;" class="l"><span>全部显示</span></a>'; allLi.addEventListener('click', () => { checkCharactersInPage(true, true); }); getLi = document.createElement('li'); getLi.innerHTML = '<a href="javascript:;" class="l"><span>收藏数据有误\uFF1F单击手动刷新</span></a>'; getLi.addEventListener('click', () => { getData(); }); groupedUL.appendChild(titleLi); groupedUL.appendChild(collectedLi); groupedUL.appendChild(notCollectedLi); groupedUL.appendChild(allLi); groupedUL.appendChild(getLi); subjectFilterElement.appendChild(groupedUL); } } async function fetchData(collection_type, offset) { const url = `https://api.bgm.tv/v0/users/${ username }/collections?subject_type=${ subject_type[subject_type_index] }&type=${ collection_type }&limit=${ limit }&offset=${ offset }`; const headers = { 'Accept': 'application/json' }; const response = await fetch(url, { headers }); const data = await response.json(); return data; } async function getData() { if (updatingData) return; updatingData = true; console.log(`Update started.`); if (getLi) { getLi.innerHTML = '<a href="javascript:;" class="l"><span>更新中</span></a>'; getLi.removeEventListener('click', getData); getLi.style.pointerEvents = 'none'; } for (let ct = 1; ct < collection_type.length; ct++) { for (let i = 0; i < subject_type.length; i++) { subject_type_index = i; const initialData = await fetchData(ct, guess); if ('description' in initialData && initialData.description.includes('equal to')) { totalItems = parseInt(initialData.description.split('equal to ')[1]); console.log(`Updated totalItems to: ${ totalItems }`); } else { totalItems = 0; } for (let offset = 0; offset < totalItems; offset += limit) { const data = await fetchData(ct, offset); allData.push(...data.data); console.log(`Fetched ${ offset + 1 }-${ offset + limit } items...`); } } } for (const item of allData) { const subjectId = item.subject_id; collectStatus[subjectId] = 'collect'; } localStorage.setItem('bangumi_subject_collectStatus', JSON.stringify(collectStatus)); updatingData = false; if (getLi) { getLi.innerHTML = '<a href="javascript:;" class="l"><span>更新结束</span></a>'; } console.log(`Update completed.`); } createFilterButtons(); }());
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址