DouBan

这个脚本已经失效了,不要再安装,现在找不到稳定的BT源。而且在线播放也更加方便。

// ==UserScript==
// @name         DouBan
// @namespace    http://tampermonkey.net/
// @version      4.20.191007.1
// @description  这个脚本已经失效了,不要再安装,现在找不到稳定的BT源。而且在线播放也更加方便。
// @author       laohoo
// @match        https://movie.douban.com/subject/*
// @connect      www.zhongzilou.com
// @connect      bt.ituoniao.com.cn
// @run-at       document-idle
// @grant        GM.xmlHttpRequest

// ==/UserScript==


/************************** 一些说明 *****************************

*  头部元数据 说明:
*        // ==UserScript==    脚本的头部开始
*        // @name         脚本名称,可省略
*        // @namespace    名字空间,这个一般写自己网站的域名,也可以是其他任意内容
*        // @version      脚本的版本号,上传到脚本网站后,通过比较版本号来升级脚本
*        // @description  脚本描述,一般简要地描述该脚本的功能
*        // @author       作者
*        // @match        脚本的适用网址,可以使用通配符,每个网址占一行
*        // @include      与   // @match  功能等价的另一种写法
*        // @exclude      脚本的排除网址,该网络不执行脚本,可以使用通配符,每个网址占一行
*        // @connect      使用 GM.xmlHttpRequest 进行数据传输的 目标网站,缺少时第一次调用该功能会有是否允许连接的选项,每个网站写一行
*        // @run-at       在什么时候开始执行脚本,"document_idle"表示在"document_end"与触发window.onload事件之间的某个时间
*        // @grant        用于声明在脚本中使用到的 GreaseMonkey API,例如:GM.xmlHttpRequest
*        // ==/UserScript==   脚本的头部结束
*
************************** 分隔线 *****************************

*  脚本大概思路介绍 :
*  1、从豆瓣电影中获取 电影的中文名字
*  2、从磁力链搜索网络获取 该电影的搜索结果页
*  3、提取搜索结果中的相关信息,如电影标题、文件大小、磁力链等
*  4、在电影海报下方插入表格,显示电影的相关信息

************************** 分隔线 *****************************

*  自动执行函数(立即调用函数):用匿名函数作为一个“容器”,
*  “容器”内部可以访问外部的变量,而外部环境不能访问“容器”内部的变量,
*  内部定义的变量不会和外部的变量发生冲突,典型写法如下:
*  (function() {
*
*  // 此处添加代码
*
*  })();
*
************************** 说明结束 *****************************/


(function() {
    // JavaScript 严格模式
    'use strict';

    //  获取电影的中文名字
    //  获取电影的标题节点,document.querySelector()  选择器,只返回第一个匹配的节点
    let title = document.querySelector("#content h1 span");

    if(title){
        // 用空格进行分割为数组,取下标[0]的部分(电影中文名 )
        let key = title.innerText.split(" ")[0];
        console.log("电影名称:", key);

        // 最后要将电影的磁力结果添加到网页中,以下为该位置的选择器
        var info = document.querySelector("#interest_sect_level");

        // 自定义 parsetext 函数,用于获取的网页转换为 HTML文档以便后继处理
        function parsetext(text) {
            var doc = null;
            try {
                // 创建一个 HTML 文档对象
                doc = document.implementation.createHTMLDocument("");
                // 将要专业的内容添加为文档对象的HTML
                doc.documentElement.innerHTML = text;
                return doc;
            }
            catch (e) {
                alert("parse error");
            }
        }

        let magurl = `http://bt.ituoniao.com.cn/api/search?source=种子搜&keyword=${key}&page=1&sort=time`;


        // GM.xmlHttpRequest 为跨网页传输内容时使用 GreaseMonkey 提供的API,功能类似于JQuery的AJAX,GM为 GreaseMonkey 的缩写
        // 要在头部添加  // @grant       GM_xmlhttpRequest  的说明
        GM.xmlHttpRequest({
            // 传送数据的 HTTP 方法
            method: "GET",

            // 传送数据的目标网址,此处由 磁力搜索网站与 电影名称 组成
            // url: "https://www.zhongzilou.com/list/"+key+"/1",
            url: magurl,

            // onload 用于载入结果,response 为自己定义的变量名,其内容为接收到的数据
            onload:  function(response){
                // console.log("磁力查找结果:",response.responseText);

                var data=[];

                let result =JSON.parse(response.responseText);
                console.log("磁力查找结果:",result);
                console.log(result.message);
                console.log(result.data.results);
                result.data.results.forEach(function(item){
                    console.log(item);
                    data.push({
                        "title":item.name,
                        "url":item.detailUrl,
                        "magnet": item.magnet,                  //  hot:电影热度数据
                        "hot": item.hot,                        //  description:其他信息
                        "description":item.formatSize
                    });
                });



                // 调用自定义的函数处理网页,以便后继操作,response.responseText 是从目标网址接收到的网页
                // let ms = parsetext(response.responseText.message);



                // 使用 document.querySelectorAll() 选择器获取每个电影的节点,返回所有匹配的节点,结果为数组,这个方法与 JQuery 的 $() 相同
//                 let megs = ms.querySelectorAll("div.panel-body.table-responsive.table-condensed table");
//                 console.log(megs);

//                 // 定义数组用于保存电影信息
                

//                 // 用于保存过滤后匹配的电影数量,大于0 为有可用信息
                 let msCount = 0;

//                 // 遍历所有的电影信息节点
//                 megs.forEach(function(item,index){
//                     console.log("电影信息",index);

//                     data.push({
//                         // title:电影标题;innerText 表示节点的文本内容
//                         "title": item.querySelector("tbody tr td div.text-left h4 a").innerText,
//                         // url:搜索结果的详细页连接;href 表示 节点的 超链接 属性
//                         "url": item.querySelector("tbody tr td div.text-left h4 a").href,
//                         // magnet:电影磁力链
//                         "magnet": item.querySelector("tbody tr td.ls-magnet a").href,
//                         //  hot:电影热度数据
//                         "hot": item.querySelector(" tbody tr td:nth-child(3) strong").innerText,
//                         //  description:其他信息
//                         "description": item.querySelector("tbody tr:nth-child(2) td:nth-child(2) strong").innerText,
//                     });
//                 });

                console.log("从搜索网站提取的电影:",data);


                /************************************* 添加表格到网中的思路 *********************
*    创建一个表格
*    给表格添加一个表头 thead
*    给表格添加一个主体 tbody
*
*    创建一个表格行,创建若干个单元格,并添加表格行中
*
*    将添加好单元格及内容的行添加到 thead 或 tbody 中
*
*    将 thead 和 tbody 添加到表格中
*
*    将表格添加网页中
********************************************************************************/

                // 创建显示信息的表格
                var table = document.createElement("table");

                // 给表格添加一个 thead
                var thead = table.createTHead();

                // 给表格添加一个 tbody
                var tbody = table.createTBody();

                // 创建一个表格行
                var tr = document.createElement("tr");

                // 创建一个表头行单元格 th1
                var th1=document.createElement("th");

                // 使用 setAttribute() 方法给单元格添加 style 属性(样式),只在表头行指定前三个单元格宽度,最后一个单元格没有width(宽度)属性
                th1.setAttribute("style","border:1px dashed #dddddd; text-align:center; width:50px; color:#007722; font-size:14px; padding:5px;");

                // 给单元格添加内部 HTML 内容
                th1.innerHTML = "磁力链";
                // 给表头行添加一个 单元格 th1
                tr.appendChild(th1);

                // 创建一个表头行单元格 th2
                var th2=document.createElement("th");
                // 使用 setAttribute() 方法给单元格添加 style 属性(样式)
                th2.setAttribute("style","border:1px dashed #dddddd; text-align:center; width:40px; color:#007722; font-size:14px; padding:5px;");
                // 给单元格添加内部 HTML 内容
                th2.innerHTML = "热度";
                // 单元格对齐方式
                th2.align="center";
                // 给表头行添加一个 单元格 th2
                tr.appendChild(th2);

                // 创建一个表头行单元格 th3
                var th3=document.createElement("th");
                // 使用 setAttribute() 方法给单元格添加 style 属性(样式)
                th3.setAttribute("style","border:1px dashed #dddddd; text-align:center; width:80px; color:#007722; font-size:14px; padding:5px;");
                // 给单元格添加内部 HTML 内容
                th3.innerHTML = "文件大小";
                th3.align="center";
                // 给表头行添加一个 单元格 th3
                tr.appendChild(th3);

                // 创建一个表头行单元格 th4
                var th4=document.createElement("th");
                // 使用 setAttribute() 方法给单元格添加 style 属性(样式),最后一个单元格不指定宽度,占用剩余宽度
                th4.setAttribute("style","border:1px dashed #dddddd; text-align:center; color:#007722; font-size:14px; padding:5px;");
                // 给单元格添加内部 HTML 内容
                th4.innerHTML = "标题";
                th4.align="center";
                // 给表头行添加一个 单元格 th4
                tr.appendChild(th4);
                // 表头行的对齐方式
                tr.align="center";

                // 将上面的表格行添加到表头
                thead.appendChild(tr);

                // 如果电影信息不为0
                if(data.length){

                    // 遍历所在电影信息,每行生成一个表格行
                    data.forEach(function(item,index){

                        // 对电影标题进行比较,只显示包含有完整电影名称的结果,indexOf(key)用于查找是包含小括号中的关键字。没有的时候是 -1
                        if(item.title.indexOf(key) != -1){
                            msCount ++;
                            var tr = document.createElement("tr");
                            var td1 = document.createElement("td");
                            // 使用 setAttribute() 方法给单元格添加 style 属性(样式),具体内容单元格不指定宽度,其宽度与表头行相同(下面所有单元格相同)
                            td1.setAttribute("style","border:1px dashed #dddddd; text-align:center; color:#007722; font-size:14px; padding:5px;");

                            // 创建一个超链接元素
                            var a = document.createElement("a");
                            a.href = item.magnet;
                            a.innerText = "磁力链";
                            td1.appendChild(a);
                            tr.appendChild(td1);
                            var td2 = document.createElement("td");
                            td2.setAttribute("style","border:1px dashed #dddddd; text-align:center; color:#007722; font-size:14px; padding:5px;");
                            td2.innerHTML = item.hot;
                            tr.appendChild(td2);
                            var td3 = document.createElement("td");
                            td3.setAttribute("style","border:1px dashed #dddddd; text-align:center;  color:#007722; font-size:14px; padding:5px;");
                            td3.innerHTML = item.description;
                            tr.appendChild(td3);
                            var td4 = document.createElement("td");
                            td4.setAttribute("style","border:1px dashed #dddddd; text-align:left;  color:#007722; font-size:14px; padding:5px;");
                            //td4.innerHTML = item.title;
                            var p = document.createElement("sapn");
                            p.innerText = item.title.slice(0,55);
                            p.title = item.title;
                            // p.href = item.url;
                            console.log(item.url);
                            td4.appendChild(p);

                            console.log(item.title.length);
                            tr.appendChild(td4);

                            // 添加一行到表格的主体 tbody
                            tbody.appendChild(tr);
                            console.log(item);
                        }
                    });

                    // 当没有匹配的电影资源时,生成一个合并单元格显示 错误提示信息
                    if(msCount===0){
                        // 创建一个表格行
                        var trerror = document.createElement("tr");
                        // 创建一个单元格
                        var tderror = document.createElement("td");
                        // 设置单元格的 colspan 属性合并单元格k
                        tderror.setAttribute("colspan","4");
                        // 设置单元格内 信息显示的样式属性
                        tderror.setAttribute("style","border:1px dashed #dddddd; text-align:left; text-align:center; color:#d9896a; font-size:14px; padding:5px;");
                        // 单元格内显示 的文字
                        tderror.innerText ="电影 "+key+" 找不到可用磁力资源!";
                        // 添加单元格到表格行
                        trerror.appendChild(tderror);
                        // 添加表格行到表格主体 tbody
                        tbody.appendChild(trerror);
                    }

                    // 将表头行添加到表格
                    table.appendChild(thead);
                    // 将表格主体添加到表格
                    table.appendChild(tbody);
                    // 设置表格线宽度
                    table.border="1";
                    // 设置表格的 style 属性
                    table.setAttribute("style","width: 100%; padding: 0; margin-bottom: 3px;");
                    // 将表格添加到 网页中。
                    info.parentNode.insertBefore(table,info);
                }


            }  // end forEach

        });    // end GM.xmlHttpRequest

    }else{
        console.info("载入信息错误!");
    }

})();