Premiumize.me Premium Link Converter

Convert standard links into premium links using premiumize.me

目前為 2025-07-15 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Premiumize.me Premium Link Converter
// @version      3.1
// @grant        GM.xmlHttpRequest
// @grant        GM_registerMenuCommand
// @grant        GM_setValue
// @grant        GM_getValue
// @namespace    https://gf.qytechs.cn/en/users/807108-jeremy-r
// @include      *://*
// @match        https://www.premiumize.me/
// @description  Convert standard links into premium links using premiumize.me
// @icon         https://icons.duckduckgo.com/ip2/Premiumize.me.ico
// @author       JRem
// @license      MIT
// ==/UserScript==

let regexPattern = null;
const processedURLs = new Set();
const ONE_DAY_MS = 24 * 60 * 60 * 1000;

// Determine if the pattern should be refreshed
function shouldUpdateWildcards() {
    const lastUpdated = GM_getValue("lastUpdated", 0);
    const now = Date.now();
    return !regexPattern || regexPattern.source === '' || (now - lastUpdated > ONE_DAY_MS);
}

// Fetch new regex wildcards from Premiumize API
function updateLinkWildcards() {
    console.log("Fetching Premiumize Wildcards...");
    GM.xmlHttpRequest({
        method: "GET",
        url: "https://www.premiumize.me/addonapi",
        onload: (response) => {
            try {
                const data = JSON.parse(response.responseText);
                console.log("API Wildcard Response:", data);

                if (data.linkwildcards && Array.isArray(data.linkwildcards)) {
                    const escapedWildcards = data.linkwildcards.map(pattern =>
                        pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&').replace(/\\\*/g, '.*')
                    );

                    regexPattern = new RegExp(escapedWildcards.join('|'), 'i');
                    GM_setValue("regexPatternSource", regexPattern.source);
                    GM_setValue("lastUpdated", Date.now());
                    if (data.apipass) {
                        GM_setValue("apikey", data.apipass);
                    }

                    alert("✅ Premiumize domains and API key updated!");
                } else {
                    throw new Error("Invalid wildcard data.");
                }
            } catch (err) {
                console.error("Failed to parse wildcard response:", err);
                alert("Error: could not parse Premiumize wildcard response.");
            }
        },
        onerror: (err) => {
            console.error("Request error:", err);
            alert("Failed to fetch Premiumize link wildcards.");
        }
    });
}

// Load stored regex on startup
function loadStoredRegex() {
    const source = GM_getValue("regexPatternSource", null);
    if (source) {
        regexPattern = new RegExp(source, 'i');
    }
}

// Check if current URL matches Premiumize wildcard pattern
function matchesPremiumizeLink(url) {
    return regexPattern && regexPattern.test(url);
}

// Create menu command
function createMenu() {
    GM_registerMenuCommand("Update Premiumize Domains", updateLinkWildcards);
    console.log("Menu command registered.");
}

// Create button for direct download links
function createFastDownloadButton(linkElement, fileURL) {
    let button = document.createElement('button');
    button.innerHTML = 'Send to Premiumize';
    button.style.marginLeft = '2px';
    button.style.backgroundColor = 'red';
    button.style.color = 'white';
    button.style.borderRadius = '5px';
    button.onclick = () => {
        window.open(`https://www.premiumize.me/transfers?url=${encodeURIComponent(fileURL)}`, '_blank');
    };
    linkElement.setAttribute('premiumize', 'true');
    linkElement.insertAdjacentElement('afterend', button);
}

// Create button for magnet links
function createMagnetButton(linkElement, magnetURL) {
    let button = document.createElement('button');
    button.innerHTML = 'Send to Premiumize';
    button.style.marginLeft = '2px';
    button.style.backgroundColor = 'red';
    button.style.color = 'white';
    button.style.borderRadius = '5px';
    button.onclick = () => {
        sendMagnetToPremiumize(magnetURL);
    };
    linkElement.setAttribute('premiumize', 'true');
    linkElement.insertAdjacentElement('afterend', button);
}

function sendMagnetToPremiumize(magnetURL) {
    const apikey = GM_getValue("apikey", null);
    if (!apikey) {
        alert("Premiumize API key not set. Please run 'Update Premiumize Domains' first.");
        return;
    }

    const formData = new FormData();
    formData.append("src", magnetURL);

    GM.xmlHttpRequest({
        method: "POST",
        url: `https://www.premiumize.me/api/transfer/create?apikey=${apikey}`,
        data: formData,
        headers: {
            "accept": "application/json"
        },
        onload: (response) => {
            try {
                const res = JSON.parse(response.responseText);
                if (res.status === "success") {
                    alert(`✅ Magnet sent successfully!\nName: ${res.name}`);
                } else {
                    alert(`❌ Failed to send magnet: ${res.message}`);
                }
            } catch (err) {
                console.error("Error parsing magnet response:", err);
                alert("❌ Failed to send magnet: Invalid server response.");
            }
        },
        onerror: (err) => {
            console.error("Magnet send error:", err);
            alert("❌ Failed to send magnet: Network error.");
        }
    });
}

// Process HTTP-based links
function processHttpLinks() {
    if (!regexPattern) return;

    const links = document.querySelectorAll('a[href^="http"]');
    links.forEach(link => {
        const href = link.href;
        if (!processedURLs.has(href) && matchesPremiumizeLink(href)) {
            createFastDownloadButton(link, href);
            processedURLs.add(href);
        }
    });
}

// Process magnet links
function processMagnetLinks() {
    const magnetLinks = document.querySelectorAll('a[href^="magnet:"]');
    magnetLinks.forEach(link => {
        const href = link.href;
        if (!processedURLs.has(href)) {
            createMagnetButton(link, href);
            processedURLs.add(href);
        }
    });
}

// Observe and process links
function observeLinks() {
    processHttpLinks();
    processMagnetLinks();
}

function debounce(func, wait) {
    let timeout;
    return function (...args) {
        clearTimeout(timeout);
        timeout = setTimeout(() => func.apply(this, args), wait);
    };
}

const observer = new MutationObserver(debounce(observeLinks, 500));
observer.observe(document.body, { childList: true, subtree: true });

window.onload = () => {
    loadStoredRegex();
    createMenu();

    // ✅ Auto-update if regex is missing or too old
    if (shouldUpdateWildcards()) {
        console.log("Auto-updating Premiumize linkwildcards...");
        updateLinkWildcards();
    }

    observeLinks();
};

QingJ © 2025

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