Greasy Fork is available in English.

迅雷电影天堂磁力链批量下载

迅雷电影天堂 | 详情页 | 磁力链列表上方标题行新增【批量下载磁力链】超链接

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         迅雷电影天堂磁力链批量下载
// @namespace    http://tampermonkey.net/
// @version      2024-09-29
// @description  迅雷电影天堂 | 详情页 | 磁力链列表上方标题行新增【批量下载磁力链】超链接
// @author       JoyofFire
// @match        https://www.xl720.com/thunder/*.html
// @grant        none
// @run-at       document-idle
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    const selectors = {
        title: ".entry-content > h2:last-of-type",
        anchor: "#zdownload .down_btn_cl a",
    };
    const values = {
        magnet_protocal: "magnet:",
        dl_btn_text: "> 批量下载磁力链 <",
        new_tab: "_blank",
    };

    const $ = (querySelectorAll) => (x) => [...querySelectorAll(x)];
    const dom$ = $(document.querySelectorAll.bind(document));
    const el$ = (el) => $(el.document.querySelectorAll.bind(el));

    const anchor_to_link = (a) => a.href;
    const is_magnet = (x) => `${x}`.startsWith(values.magnet_protocal);
    const anchors_to_links = (xs) => xs.map(anchor_to_link).filter(is_magnet);
    const text_to_blob = (x) => new Blob([x], { type: "text/plain" });

    const maybe_title = () => new Promise((resolve, reject) => {
        const matches = dom$(selectors.title);
        const _return = matches.length > 0 ? resolve : reject;
        _return(matches.at(-1));
    });

    const append_href_to_title = (url) => (title) => {
        const a = document.createElement("a");
        a.target = values.new_tab;
        a.textContent = values.dl_btn_text;
        a.href = url;
        title.append(a);
        return { title, url };
    };

    const handle_error = (error) => {
        if (!error) {
            alert("找不到标题行!无法添加按钮!");
            return;
        }
        console.error(error);
    };

    const main = () => {
        const anchors = dom$(selectors.anchor);
        const links = anchors_to_links(anchors);
        const links_text = links.join("\n");
        const text_blob = text_to_blob(links_text);
        const text_url = URL.createObjectURL(text_blob);

        maybe_title()
            .then(append_href_to_title(text_url))
            .then(console.info.bind(console))
            .catch(handle_error);
    };

    main();
})();