豆瓣电影磁力链

在 https://movie.douban.com/ 中进入电影的详细页时,在电影海报下方自动添加与当前电影匹配的磁力链。

目前為 2018-05-26 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         豆瓣电影磁力链
// @namespace    http://tampermonkey.net/
// @version      1.18.0526.18
// @description  在 https://movie.douban.com/ 中进入电影的详细页时,在电影海报下方自动添加与当前电影匹配的磁力链。
// @author       anntiza
// @match        https://movie.douban.com/subject/*
// @connect      www.wcs123.com
// @run-at       document-idle
// @grant        GM.xmlHttpRequest
// @grant        GM_setClipboard
// ==/UserScript==

(function () {
    'use strict';

    // 获取电影的标题
    let title = document.querySelector("#content h1 span");
    // 取中文名
    let key = title.innerText.split(" ")[0];

    // 在此节点前插入显示磁力结果的表格
    let info = document.querySelector("#interest_sect_level");
    let data = [];

    // 转换搜索结果
    function parsetext(text) {
        let doc = null;
        try {
            doc = document.implementation.createHTMLDocument("");
            doc.documentElement.innerHTML = text;
            return doc;
        }
        catch (e) {
            //  alert("parse error");
        }
    }

    // 将搜索结果保存到数组中
    function make_data(mags) {
        let d = [];
        mags.forEach(function (item, index) {
            d.push({
                "title": item.querySelector("h3").innerText,
                "url": "http://www.wcs123.com" + item.querySelector("h3>a").href,
                "magnet": item.querySelector("span>a").href,
                "hot": item.querySelector("span:nth-child(5)>b").innerText,
                "description": item.querySelector("span:nth-child(6)>b").innerText
            });
        });
        return d;
    }


    // 创建显示结果的表格
    function create_table(data) {
        let table = document.createElement("table");
        let thead = table.createTHead();
        let tbody = table.createTBody();

        // 使用 douban 原有的表格样式
        table.setAttribute("class", "olt");

        let tr = document.createElement("tr");
        let th1 = document.createElement("th");
        let magnetTitle = document.createElement("strong");
        magnetTitle.innerText = "操作";

        th1.appendChild(magnetTitle);
        th1.setAttribute("style", "border:1px dashed #dddddd;text-align:center;width:50px;padding:5px;color:#007722;font-size:16px;padding:8px;");
        tr.appendChild(th1);
        var th2 = document.createElement("th");
        th2.innerHTML = "热度";
        th2.setAttribute("style", "border:1px dashed #dddddd;text-align:center;width:40px;padding:5px;color:#007722;font-size:16px;padding:8px;");
        tr.appendChild(th2);
        var th3 = document.createElement("th");
        th3.innerHTML = "文件大小";
        th3.setAttribute("style", "border:1px dashed #dddddd;text-align:center;width:70px;padding:5px;color:#007722;font-size:16px;padding:8px;");
        tr.appendChild(th3);
        var th4 = document.createElement("th");
        th4.innerHTML = "文  件  标  题";
        th4.setAttribute("style", "border:1px dashed #dddddd;text-align:center;padding:5px;color:#007722;font-size:16px;padding:8px;");
        tr.appendChild(th4);

        // 添加表头行
        thead.appendChild(tr);
        table.appendChild(thead);

        if (data.length) {
            data.forEach(function (item, index) {
                let tr = document.createElement("tr");
                let td1 = document.createElement("td");
                let magnet_img = document.createElement("img");
                magnet_img.src = "http://www.wcs123.com/static/img/magnet.png";
                magnet_img.alt = "磁力链接";
                let copy_magnet = document.createElement("a");
                td1.appendChild(magnet_img);
                copy_magnet.href = item.magnet;
                copy_magnet.innerText = "复制";
                copy_magnet.title = "单击此处复制磁力链接到剪贴板";
                copy_magnet.onclick = event => {
                    event.target.innerHTML = "成功";
                    GM_setClipboard(event.target.href);
                    setTimeout(() => {
                        event.target.innerHTML = "复制";
                    }, 2000);
                    event.preventDefault(); //阻止跳转
                };
                td1.appendChild(copy_magnet);
                td1.setAttribute("class", "pl");
                td1.setAttribute("style", "border:1px dashed #dddddd;text-align:center;width:50px;padding:8px;");
                tr.appendChild(td1);
                let td2 = document.createElement("td");
                td2.innerHTML = item.hot;
                td2.setAttribute("class", "pl");
                td2.setAttribute("style", "border:1px dashed #dddddd;width:40px;padding:8px;");
                tr.appendChild(td2);
                let td3 = document.createElement("td");
                let open_url = document.createElement("a");
                open_url.href = item.url;
                open_url.innerText = item.description;
                open_url.target = "_blank";
                open_url.title = "打开磁力链接目标网页";
                td3.appendChild(open_url);
                //td3.innerHTML = item.description;
                td3.setAttribute("class", "pl");
                td3.setAttribute("style", "border:1px dashed #dddddd;width:70px;padding:8px;");
                tr.appendChild(td3);
                let td4 = document.createElement("td");
                let mov_title = document.createElement("a");
                mov_title.innerText = item.title
                    .replace(/<(style|script|iframe)[^>]*?>[\s\S]+?<\/\1\s*>/gi, '')
                    .replace(/<[^>]+?>/g, '')
                    .replace(/\s+/g, ' ')
                    .replace(/ /g, ' ')
                    .replace(/>/g, ' ');
                mov_title.title = item.title;
                mov_title.href = item.magnet;
                mov_title.target = "_blank";
                td4.appendChild(mov_title);
                td4.setAttribute("class", "pl");
                td4.setAttribute("style", "border:1px dashed #dddddd;padding:8px;");
                tr.appendChild(td4);
                tbody.appendChild(tr);
            });
            table.appendChild(tbody);
        }
        else {
            let tr_error = document.createElement("tr");
            let td_error = document.createElement("td");
            td_error.setAttribute("colspan", "4");
            td_error.setAttribute("style", "border:1px dashed #dddddd;padding:12px;text-align:center;color:#dc3545;font-size:16px;font-weight:bold;");
            td_error.innerText = "当前电影无可用磁力资源!";
            tr_error.appendChild(td_error);
            tbody.appendChild(tr_error);
            table.appendChild(tbody);
        }
        return table;
    }

    GM.xmlHttpRequest({
        method: "GET",
        url: `http://www.wcs123.com/s/${key}-hot-desc-1`,
        // headers: {
        //     "User-Agent": "Mozilla/5.0",    // If not specified, navigator.userAgent will be used.
        //     "Accept": "text/xml"            // If not specified, browser defaults will be used.
        // },
        onload: function (response) {
            // var responseXML = null;
            // Inject responseXML into existing Object (only appropriate for XML content).
            // if (!response.responseXML) {
            //     responseXML = new DOMParser()
            //         .parseFromString(response.responseText, "text/xml");
            // }
            let result = parsetext(response.responseText);
            let mags = result.querySelectorAll("table.table tbody tr td.x-item");

            data = make_data(mags);
            // console.log(data);
            info.parentNode.insertBefore(create_table(data), info);
        }
    });

})();