您需要先安装一个扩展,例如 篡改猴、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);
- }
- })();