Greasy Fork

豆瓣电影磁力链

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

目前为 2018-06-06 提交的版本。查看 最新版本

// ==UserScript==
// @name         豆瓣电影磁力链
// @namespace    http://tampermonkey.net/
// @version      3.18.0606.02
// @description  在 https://movie.douban.com/ 中进入电影的详细页时,在电影海报下方自动添加与当前电影匹配的磁力链。
// @author       anntiza
// @match        https://movie.douban.com/subject/*
// @connect      www.wcs123.com
// @connect      www.btanf.com
// @connect      xiguacili.net
// @run-at       document-idle
// @grant        GM.xmlHttpRequest
// @grant        GM.setClipboard
// @grant        GM_setValue
// @grant        GM.setValue
// @grant        GM_getValue
// @grant        GM.getValue
// @require      https://cdn.jsdelivr.net/npm/vue/dist/vue.js
// ==/UserScript==

(function() {
    'use strict';
    let insertNode = document.querySelector("#interest_sect_level");
    let mainNode = document.createElement("div");
    let key = document.querySelector("div#content h1 span").innerText.split(" ")[0];
    mainNode.setAttribute("id","mainmovie");
    mainNode.innerHTML="<movies></movies>";
    insertNode.parentNode.insertBefore(mainNode,insertNode);
    console.log(insertNode);

    function parseText(text) {
        let doc = null;
        try {
            doc = document.implementation.createHTMLDocument("");
            doc.documentElement.innerHTML = text;
            return doc;
        }
        catch (e) {
            //  alert("parse error");
        }
    }
    Vue.component('movies',{
        data: function () {
            return {
                movies: [],
                error:null,
                currentSelect:"xiguacili",
                searchSite:["xiguacili","btanf","wcs123"],
                magnetSite:
                {
                    xiguacili: {
                        search: (key) => {
                            return `http://xiguacili.net/xigua/${key}.html`;
                        },
                        lists: "div.row:nth-child(7) div.ffbox",
                        title: (item) => {
                            return item.querySelector("div.title h3>a").innerText;
                        },
                        url: (item) => {
                            return item.querySelector("div.title h3 a").href;
                        },
                        magnet: (item) => {
                            return item.querySelector("span>a").href;
                        },
                        hot: (item) => {
                            return item.querySelector("div.categorybar span:nth-child(5) > b").innerText;
                        },
                        size: (item) => {
                            return item.querySelector("div.categorybar span:nth-child(3) > b").innerText;
                        }
                    },
                    wcs123: {
                        search: (key) => {
                            return `http://www.wcs123.com/s/${key}-hot-desc-1`;
                        },
                        lists: "td.x-item",
                        title: (item) => {
                            return item.querySelector("h3 a").innerText;
                        },
                        url: (item) => {
                            return "http://www.wcs123.com" + item.querySelector("h3>a").href;
                        },
                        magnet: (item) => {
                            return item.querySelector("span>a").href;
                        },
                        hot: (item) => {
                            return item.querySelector("span:nth-child(5)>b").innerText;
                        },
                        size: (item) => {
                            return item.querySelector("span:nth-child(6)>b").innerText;
                        }
                    },
                    btanf: {
                        search: (key) => {
                            return `http://www.btanf.com/search/${key}-first-asc-1`;
                        },
                        lists: "div.search-item",
                        title: (item) => {
                            return item.querySelector("div.item-title>a").innerText;
                        },
                        url: (item) => {
                            return "http://www.btanf.com" + item.querySelector("div.item-title>a").href;
                        },
                        magnet: (item) => {
                            return item.querySelector("div:nth-child(3) > a:nth-child(5)").href;
                        },
                        hot: (item) => {
                            return item.querySelector(" div:nth-child(3) > span:nth-child(2) > b").innerText;
                        },
                        size: (item) => {
                            return item.querySelector("div:nth-child(3) > span:nth-child(4) > b").innerText;
                        }
                    }
                },

            }
        },
        template:
        '<table style="width: 100%; padding: 0; margin-bottom: 3px;">' +
        '<thead>' +
        '<tr>' +
        '<th style="border:1px dashed #dddddd; text-align:center; width:45px; color:#007722; font-size:14px; padding:8px;">操作</th>' +
        '<th style="border:1px dashed #dddddd; text-align:center; width:45px; color:#007722; font-size:14px; padding:8px;">热度</th>' +
        '<th style="border:1px dashed #dddddd; text-align:center; width:70px; color:#007722; font-size:14px; padding:8px;">大小</th>' +
        '<th style="border:1px dashed #dddddd; text-align:center; color:#007722; font-size:14px; padding:8px;">' +
        '磁力搜索网站:<select><option v-for="item in searchSite" v-bind:value="item" v-on:click="selectMagnetSite(item)">&nbsp;{{item}}&nbsp; </option></select></th>' +
        '</tr>' +
        '</thead>' +
        '<tbody>' +
        '<tr v-if="error"><td colspan="4"  style="color:darkred;font-size:16px;text-align:center;padding:8px;"><span>{{error}}</span></td></tr>' +
        '<tr v-for="item in movies" v-else>' +
        '<td style="border:1px dashed #dddddd; text-align:center; padding:8px;"><span>复制</span></td>' +
        '<td style="border:1px dashed #dddddd; padding:8px;">{{item.hot}}</td>' +
        '<td style="border:1px dashed #dddddd; padding:8px;">{{item.size}}</td>' +
        '<td style="border:1px dashed #dddddd; padding:8px;">{{item.title}}</td>' +
        '</tr></tbody></table>',
        mounted:function(){
            this.getMovies(key);
            console.log("mounted >>> ",this.movies);
        },
        methods:{
            selectMagnetSite:function(item){
                this.currentSelect=item;
                console.log(item);
                this.getMovies(key);
            },
            getMovies:function(keyword){
                console.log("get movies start!");

                let currentMagnet=this.magnetSite[this.currentSelect];

                console.log("currentMagnet 》》 》 ",currentMagnet);
                var self = this;
                self.movies =[];
                GM.xmlHttpRequest({
                    method: "GET",
                    url: currentMagnet.search(key),//   `http://xiguacili.net/xigua/${keyword}.html`,  //http://xiguacili.net/xigua/${key}.html
                    onload: function(response) {
                        // console.log(response.responseText);
                        let magHtml = parseText(response.responseText);
                        let mags = magHtml.querySelectorAll(currentMagnet.lists);  //magHtml.querySelectorAll("div.row:nth-child(7) div.ffbox");
                        console.log("数量:",mags.length);
                        console.log(mags);
                        if(mags){
                            self.error =null;
                            mags.forEach(function (item, index) {
                                let title = currentMagnet.title(item); //item.querySelector("div.title h3>a").innerText;
                                console.log("title."+title);
                                if(title.indexOf(key) != -1){
                                    self.movies.push({
                                        "title": title,
                                        "url": currentMagnet.url(item),
                                        "magnet": currentMagnet.magnet(item),
                                        "hot": currentMagnet.hot(item),
                                        "size": currentMagnet.size(item),

//                                         "title": title,
//                                         "url": item.querySelector("div.title h3 a").href,
//                                         "magnet": item.querySelector("div.categorybar span:nth-child(6)>a").href,
//                                         "hot": item.querySelector("div.categorybar span:nth-child(5) > b").innerText,
//                                         "size": item.querySelector("div.categorybar span:nth-child(3) > b").innerText
                                    });
                                }
                            });
                            console.log("self.movies >>> .",self.movies);
                        }
                        if(!self.movies.length){
                            self.error ="当前电影无磁力资源,换个磁力搜索网站试试!";
                        }
                    },
                    onerror:function(ex){
                        console.log(`獲取磁力鏈資源異常:${ex}`);
                        self.error ="提供磁力资源的网站异常,请稍后再重试!";
                    }
                });

            }
        }

    });

    var app = new Vue({
        el: '#mainmovie',
    });

    // Your code here...
})();