您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add links to all releases chart by featured and credited artists on album page
// ==UserScript== // @name RYM: All releases chart from album page // @namespace https://github.com/sercep/userscripts // @version 1.0.0 // @description Add links to all releases chart by featured and credited artists on album page // @author sercep // @match https://rateyourmusic.com/release/* // @license MIT // ==/UserScript== (function() { 'use strict'; function collectArtistsFrom(selector) { const anchors = document.querySelectorAll(selector); const result = []; anchors.forEach(a => { const href = a.getAttribute('href'); if (!href) return; const parts = href.split('/'); if (parts.length >= 3 && parts[1] === 'artist') { const artistId = parts[2]; if (!result.includes(artistId)) { result.push(artistId); } } }); return result; } function getArtistsFromUrl() { const artists = collectArtistsFrom('.tracklist_title .rendered_text a.artist'); return artists; } function buildChartUrl(artistArray) { const artistParam = artistArray.join(','); const link = `https://rateyourmusic.com/charts/popular/album,ep,comp,single,video,unauth,mixtape,musicvideo,djmix,additional/all-time/a:${artistParam}/incl:live,archival,soundtrack/`; console.log(link); return link; } function createChartSection(artists) { if (artists.length === 0) return; const outerDiv = document.createElement('div'); outerDiv.className = 'section_lists'; const newSection = document.createElement('div'); newSection.className = 'section_charts'; const headerDiv1 = document.createElement('div'); headerDiv1.className = 'release_page_header'; const h2 = document.createElement('h2'); h2.style.float = 'left'; h2.textContent = 'Charts'; headerDiv1.appendChild(h2); newSection.appendChild(headerDiv1); const chartUrl = buildChartUrl(artists); const headerDiv2 = document.createElement('div'); headerDiv2.className = 'release_page_header'; const ul = document.createElement('ul'); ul.className = 'credits'; const li = document.createElement('li'); const link = document.createElement('a'); link.href = chartUrl; link.textContent = 'All releases by artists'; li.appendChild(link); ul.appendChild(li); headerDiv2.appendChild(ul); newSection.appendChild(headerDiv2); const table = document.createElement('table'); table.className = 'color_bar'; table.style.cssText = 'width:100%;height:1px;font-size:1px;padding:0;'; const tbody = document.createElement('tbody'); const tr = document.createElement('tr'); tr.style.cssText = 'height:1px;padding:0;'; tbody.appendChild(tr); table.appendChild(tbody); newSection.appendChild(table); outerDiv.appendChild(newSection); const line = document.createElement('div'); line.style.cssText = 'width:100%;height:1px;background-color:#ffffff;margin:10px 0;'; outerDiv.appendChild(line); const listSection = document.querySelector('.section_lists'); if (listSection && listSection.parentNode) { listSection.parentNode.insertBefore(outerDiv, listSection); } else { document.body.appendChild(outerDiv); } } const urlArtists = getArtistsFromUrl(); const featuredArtists = collectArtistsFrom('ul.credits li.featured_credit a.artist'); const mainCredits = collectArtistsFrom('ul.credits > li a.artist'); const minorCredits = collectArtistsFrom('#minor_credits_ a.artist'); const tracklistArtists = collectArtistsFrom('.tracklist_title .rendered_text a.artist'); const allCreditedArtists = [...mainCredits]; for (const a of minorCredits) { if (!allCreditedArtists.includes(a)) { allCreditedArtists.push(a); } } if (urlArtists.length === 0 && featuredArtists.length === 0 && allCreditedArtists.length === 0) return; const outerDiv = document.createElement('div'); outerDiv.className = 'section_lists'; const newSection = document.createElement('div'); newSection.className = 'section_charts'; const headerDiv1 = document.createElement('div'); headerDiv1.className = 'release_page_header'; const h2 = document.createElement('h2'); h2.style.float = 'left'; h2.textContent = 'Charts'; headerDiv1.appendChild(h2); newSection.appendChild(headerDiv1); if (urlArtists.length > 0) { const urlChartUrl = buildChartUrl(urlArtists); const headerDiv2 = document.createElement('div'); headerDiv2.className = 'release_page_header'; const ul = document.createElement('ul'); ul.className = 'credits'; const li = document.createElement('li'); const link = document.createElement('a'); link.href = urlChartUrl; link.textContent = 'All releases by artists of album'; li.appendChild(link); ul.appendChild(li); headerDiv2.appendChild(ul); newSection.appendChild(headerDiv2); } if (featuredArtists.length > 0) { const featuredUrl = buildChartUrl(featuredArtists); const headerDiv2 = document.createElement('div'); headerDiv2.className = 'release_page_header'; const ul = document.createElement('ul'); ul.className = 'credits'; const li = document.createElement('li'); const link1 = document.createElement('a'); link1.href = featuredUrl; link1.textContent = 'All releases by featured artists'; li.appendChild(link1); ul.appendChild(li); headerDiv2.appendChild(ul); newSection.appendChild(headerDiv2); } if (allCreditedArtists.length > 0) { const creditedUrl = buildChartUrl(allCreditedArtists); const headerDiv3 = document.createElement('div'); headerDiv3.className = 'release_page_header'; const ul = document.createElement('ul'); ul.className = 'credits'; const li = document.createElement('li'); const link2 = document.createElement('a'); link2.href = creditedUrl; link2.textContent = 'All releases by credited artists'; li.appendChild(link2); ul.appendChild(li); headerDiv3.appendChild(ul); newSection.appendChild(headerDiv3); } const table = document.createElement('table'); table.className = 'color_bar'; table.style.cssText = 'width:100%;height:1px;font-size:1px;padding:0;'; const tbody = document.createElement('tbody'); const tr = document.createElement('tr'); tr.style.cssText = 'height:1px;padding:0;'; tbody.appendChild(tr); table.appendChild(tbody); newSection.appendChild(table); outerDiv.appendChild(newSection); const line = document.createElement('div'); line.style.cssText = 'width:100%;height:1px;background-color:#ffffff;margin:10px 0;'; outerDiv.appendChild(line); const listSection = document.querySelector('.section_lists'); if (listSection && listSection.parentNode) { listSection.parentNode.insertBefore(outerDiv, listSection); } else { document.body.appendChild(outerDiv); } })();