您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds multiple primary artists unlike the original function + button accessible to Contributors
- // ==UserScript==
- // @name "Copy Tracklist Markup" with MPA
- // @namespace http://tampermonkey.net/
- // @version 1.4
- // @description Adds multiple primary artists unlike the original function + button accessible to Contributors
- // @author thousandeyes
- // @match https://genius.com/albums/*
- // @grant none
- // @run-at document-end
- // ==/UserScript==
- (function() {
- 'use strict';
- function getTracklist() {
- const artistLinks = document.querySelectorAll('a.header_with_cover_art-primary_info-primary_artist');
- const albumTitle = document.querySelector('h1.header_with_cover_art-primary_info-title');
- const tracks = document.querySelectorAll('album-tracklist-row .chart_row-content');
- if (!artistLinks.length || !albumTitle || tracks.length === 0) {
- console.log('');
- return;
- }
- let artistNames = Array.from(artistLinks).map(link => `[${link.textContent.trim()}](${link.href})`);
- let formattedArtists = artistNames.length > 2
- ? artistNames.slice(0, -1).join(', ') + ' & ' + artistNames[artistNames.length - 1]
- : artistNames.join(' & ');
- const albumName = albumTitle.textContent.trim();
- const albumUrl = window.location.href;
- let tracklistText = `<b>${formattedArtists} - [*${albumName}*](${albumUrl}) Lyrics and Tracklist</b>\n\n`;
- tracks.forEach((trackElement, index) => {
- const trackLink = trackElement.querySelector('a');
- if (!trackLink) return;
- let rawTitle = trackLink.textContent.trim().replace(/\s*Lyrics$/, '');
- const trackUrl = trackLink.href;
- let title = rawTitle;
- let featuredText = "";
- const ftPattern = /[\(\s](ft\.?|feat\.?|Ft\.?)[\s\.](.+?)[\)]?$/i;
- const ftMatch = title.match(ftPattern);
- if (ftMatch) {
- featuredText = ftMatch[2].trim();
- title = title.replace(ftPattern, '').trim();
- }
- let primaryArtists = [];
- const byPattern = /(.+?)\s+by\s+(.+)/i;
- const match = title.match(byPattern);
- if (match) {
- title = match[1].trim();
- primaryArtists = match[2]
- .split(/,\s*|\s*&\s*/)
- .map(artist => `[${artist}](${getArtistUrl(artist)})`);
- }
- let trackText = `${index + 1}. `;
- if (primaryArtists.length > 0) {
- const joinedPrimary = primaryArtists.length > 2
- ? primaryArtists.slice(0, -1).join(', ') + ' & ' + primaryArtists[primaryArtists.length - 1]
- : primaryArtists.join(' & ');
- trackText += joinedPrimary + ' - ';
- }
- trackText += `[${title}](${trackUrl})`;
- let featuredArtistsText = "";
- const featuredArtists = trackElement.querySelectorAll('.featured_artists a');
- if (featuredArtists.length > 0) {
- featuredArtistsText = Array.from(featuredArtists).map(artist => {
- const name = artist.textContent.trim();
- return `[${name}](${artist.href})`;
- }).join(', ');
- } else if (featuredText) {
- featuredArtistsText = featuredText;
- }
- if (featuredArtistsText) {
- trackText += ` ft. ${featuredArtistsText}`;
- }
- tracklistText += `${trackText}\n`;
- });
- navigator.clipboard.writeText(tracklistText)
- .then(() => {
- const button = document.querySelector('.custom-copy-button');
- button.textContent = 'Copied to clipboard';
- setTimeout(() => {
- button.textContent = 'Copy Tracklist Markup';
- }, 2000);
- })
- .catch(err => console.log('Error: ' + err));
- }
- function getArtistUrl(artistName) {
- return `https://genius.com/artists/${encodeURIComponent(artistName.trim().replace(/\s+/g, '-'))}`;
- }
- function createCopyButton() {
- const button = document.createElement('div');
- button.className = 'square_button u-bottom_margin custom-copy-button';
- button.textContent = 'Copy Tracklist Markup';
- button.style.cursor = 'pointer';
- button.addEventListener('click', getTracklist);
- const moreButton = document.querySelector('div.square_button.drop-target');
- if (moreButton) {
- moreButton.parentNode.insertBefore(button, moreButton.nextSibling);
- }
- }
- window.addEventListener('load', createCopyButton);
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址