Apple Music Enhanced

增强Apple Music页面功能,添加ID复制、Telegram Bot下载和地区切换

// ==UserScript==
// @name Apple Music Enhanced
// @namespace http://tampermonkey.net/
// @version 1.8
// @description 增强Apple Music页面功能,添加ID复制、Telegram Bot下载和地区切换
// @match https://music.apple.com/*
// @grant GM_setClipboard
// @grant GM_addStyle
// @license GNU GPLv3
// ==/UserScript==

(function () {
    'use strict';

    const regions = [
        { name: '🇭🇰', code: 'hk', fullName: 'Hongkong' },
        { name: '🇯🇵', code: 'jp', fullName: 'Japan' },
        { name: '🇺🇸', code: 'us', fullName: 'US' },
        { name: '🇨🇳', code: 'cn', fullName: 'China' }
    ];

    GM_addStyle(`
        .region-dropdown {
            appearance: none;
            background-color: #1c1c1e;
            border: none;
            color: white;
            font-size: 14px;
            font-family: inherit;
            padding: 8px 12px;
            width: 150px;
            border-radius: 4px;
            cursor: pointer;
            transition: background-color 0.3s;
        }
        .region-dropdown:hover {
            background-color: #2c2c2e;
        }
        .region-dropdown:focus {
            outline: none;
        }
        .region-dropdown option {
            background-color: #1c1c1e;
            color: white;
        }
        .custom-button {
            background-color: #1d1d1f;
            border: none;
            color: #fff;
            font-size: 14px;
            font-weight: bold;
            padding: 8px 16px;
            border-radius: 16px;
            cursor: pointer;
            margin-right: 10px;
            transition: background-color 0.3s, transform 0.1s;
        }
        .custom-button:hover {
            background-color: #2c2c2e;
        }
        .custom-button:active {
            transform: scale(0.95);
        }
        .feedback-message {
            position: fixed;
            bottom: 20px;
            left: 50%;
            transform: translateX(-50%);
            background-color: rgba(0, 0, 0, 0.7);
            color: white;
            padding: 10px 20px;
            border-radius: 5px;
            z-index: 9999;
            transition: opacity 0.3s;
        }
    `);

    function createButton(text, onClick, title) {
        const button = document.createElement('button');
        button.textContent = text;
        button.className = 'custom-button';
        button.addEventListener('click', onClick);
        if (title) button.title = title;
        return button;
    }

    function showFeedback(message) {
        const feedback = document.createElement('div');
        feedback.textContent = message;
        feedback.className = 'feedback-message';
        document.body.appendChild(feedback);
        setTimeout(() => {
            feedback.style.opacity = '0';
            setTimeout(() => feedback.remove(), 300);
        }, 2000);
    }

    function getAlbumId(url) {
        const match = url.match(/\/album\/.*?\/(\d+)(?:\?i=\d+)?$/);
        return match ? match[1] : null;
    }

    function addAlbumButtons() {
        const existingButtons = document.querySelector('#album-buttons-container');
        if (existingButtons) return;

        const previewButton = document.querySelector('button[data-testid="click-action"]');
        if (!previewButton) return;

        const container = document.createElement('div');
        container.id = 'album-buttons-container';
        container.style.display = 'flex';
        container.style.alignItems = 'center';
        container.style.marginTop = '10px';

        const copyIdButton = createButton('ID', function () {
            const albumId = getAlbumId(window.location.href);
            if (albumId) {
                GM_setClipboard(albumId);
                showFeedback('ID已复制');
            } else {
                showFeedback('未找到ID');
            }
        }, '复制专辑ID');

        const searchCacheButton = createButton('搜索缓存', function () {
            const albumId = getAlbumId(window.location.href);
            if (albumId) {
                GM_setClipboard(albumId);
                showFeedback('ID已复制,正在打开搜索缓存');
                window.location.href = 'tg://privatepost?channel=1841657952&post=184451';
            } else {
                showFeedback('未找到ID');
            }
        }, '复制ID并打开Telegram搜索缓存');

        const TelegramBotName = 'BeatsRobot';
        const downloadCacheButton = createButton('下载缓存', function () {
            const clipboardContent = prompt("请粘贴内容:");
            if (clipboardContent) {
                const telegramUrl = `tg://resolve?domain=${TelegramBotName}&text=${encodeURIComponent(`/cache ${clipboardContent}`)}`;
                window.location.href = telegramUrl;
                showFeedback('正在发送到Telegram下载缓存');
            } else {
                showFeedback('未获取到内容');
            }
        }, '发送内容到Telegram下载缓存');

        const directDownloadButton = createButton('直接下载', function () {
            const url = window.location.href.split('?')[0];
            const telegramUrl = `tg://resolve?domain=${TelegramBotName}&text=${encodeURIComponent(`/dl ${url} 1`)}`;
            window.location.href = telegramUrl;
            showFeedback('正在打开Telegram进行下载');
        }, '在Telegram中直接下载专辑');

        container.appendChild(copyIdButton);
        container.appendChild(searchCacheButton);
        container.appendChild(downloadCacheButton);
        container.appendChild(directDownloadButton);

        regions.forEach(region => {
            const regionButton = createButton(region.name, function () {
                const currentUrl = window.location.href.split('?')[0];
                const newUrl = currentUrl.replace(/\/\/music\.apple\.com\/[a-z]{2}/, `//music.apple.com/${region.code}`);
                GM_setClipboard(newUrl);
                showFeedback(`${region.fullName} 链接已复制`);
            }, `复制 ${region.fullName} 链接`);
            container.appendChild(regionButton);
        });

        // 将地区下拉菜单添加到按钮容器的右侧
        const dropdownContainer = document.createElement('div');
        dropdownContainer.className = 'region-dropdown-container';
        const dropdown = document.createElement('select');
        dropdown.className = 'region-dropdown';
        dropdown.innerHTML = `地区` + regions.map(region => `<option value="${region.code}">${region.name} ${region.fullName}</option>`).join('');
        dropdown.addEventListener('change', function () {
            if (this.value) {
                const currentUrl = new URL(window.location.href);
                currentUrl.hostname = `music.apple.com/${this.value}`;
                currentUrl.pathname = currentUrl.pathname.replace(/\/[a-z]{2}\//, `/${this.value}/`);
                window.location.href = currentUrl.toString();
            }
        });
        dropdownContainer.appendChild(dropdown);
        container.appendChild(dropdownContainer);

        previewButton.parentNode.insertAdjacentElement('afterend', container);
    }

    function persistentlyAddButtons() {
        addAlbumButtons();
        setTimeout(persistentlyAddButtons, 1000);
    }

    persistentlyAddButtons();

    let lastUrl = location.href;
    new MutationObserver(() => {
        const url = location.href;
        if (url !== lastUrl) {
            lastUrl = url;
            setTimeout(addAlbumButtons, 1000);
        }
    }).observe(document, { subtree: true, childList: true });
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址