Greasy Fork

Greasy Fork is available in English.

豆瓣电影磁力链

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

当前为 2018-05-26 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         豆瓣电影磁力链
// @namespace    http://tampermonkey.net/
// @version      1.18.0526.20
// @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) {
                if (item.title.indexOf(key) != -1) {
                    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 = function(event) {
                        event.target.innerHTML = "成功";
                        GM_setClipboard(event.target.href);
                        setTimeout(function(){
                            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);
        }
    });

})();