自动获取磁链接并自动离线下载

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 or Violentmonkey 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   撸
// @description 自动获取磁链接并自动离线下载




// @include     http*://javkey.com/*
// @include     http*://avsox1.com/*
// @include     http*://avxo.pw/*
// @include     http*://www.av28.com/*/movie/*

// @include     http*://*javlibrary.com/*
// @include     http*://*javlib.com/*
// @include     http*://*javl10.com/*
// @include     http*://*19lib.com/*
// @include     http*://*j15av.com/*
// @include     http*://*d21b.com/*

// @include     http*://www.libredmm.com/movies/*

// @include     http*://www.javbus.com/*
// @include     http*://www.javbus.me/*
// @include     http*://www.javbus.in/*


// @include     http*://blog.jav4you.com/*
// @include     http*://*1pondo.tv/*/index.htm
// @include     http*://www.dmm.co.jp/digital/videoa/*
// @include     http*://www.jade-net-home.com/products/*

// @include     http*://pan.baidu.com/disk/home*
// @include     http*://115.com/?tab=offline&mode=wangpan
// @include     http*://www.furk.net/users/files/add

// @version     1.51
// @run-at      document-end
// @grant       GM_xmlhttpRequest
// @grant       GM_setClipboard
// @grant       GM_setValue
// @grant       GM_getValue
// @grant       GM_addStyle
// @grant       GM_registerMenuCommand
// ==/UserScript==

var main = {
  //av信息查询 类
  jav: {
    type: 0,
    re: /(javmoo|avio|avso|avxo|av28|javkey|avsox1).*movie.*/,
    insert_where: "#movie-share",
    vid: function () {
      return document.querySelector(".header").nextElementSibling.innerHTML;
    }
  },
  javlibrary: {
    type: 0,
    re: /(javlibrary|\d\dlib|jav\d\db|d21b).*\?v=.*/,
    insert_where: "#video_favorite_edit",
    vid: function () {
      return document.querySelector("#video_id").getElementsByClassName("text")[0].innerHTML;
    }
  },
  javbus: {
    type: 0,
    re: /javbus/,
    insert_where: "#star-div",
    vid: function () {
      return document.querySelector(".header").nextElementSibling.textContent;
    }
  },
  fanhaoku: {
    type: 0,
    re: /icpmp/,
    insert_where: ".mod_film",
    vid: function () {
      return document.querySelector(".title_inner").title;
    }
  },
  libredmm: {
    type: 0,
    re: /libredmm/,
    insert_where: ".container",
    vid: function () {
      return location.href.match(/products\/(.*)/)[1];
    }
  },
  blogjav4you: {
    type: 0,
    re: /blog\.jav4you\.com/,
    insert_where: ".posttext",
    vid: function () {
      return document.querySelector(".posttitle a").textContent.match(/\[(.*)\]/)[1];
    },
  },
  pondo1: {
    type: 0,
    re: /1pondo\.tv.*\/index.htm/,
    insert_where: ".hdg3",
    vid: function () {
      return location.pathname.split("/")[3];
    },
  },
  jadenethome:{
    type:0,
    re:/jade-net-home/,
    insert_where:".detailStory",
    vid:function(){
      return document.querySelector("#detailRight dl dd").textContent;
    }
  },
  dmm: {
    type: 0,
    re: /dmm\.co\.jp/,
    insert_where: ".lh4",
    vid: function () {
      var result = location.href.replace(/.*cid=/, "").replace(/\/\??.*/, "").match(/[^h_0-9].*/);
      return result[0] ? result[0].replace("00", "") : "";
    }
  },

  //网盘下载 类
  //这些 $ 是真正的 jquery
  baidu: {
    type: 1,
    re: /pan\.baidu\.com/,
    fill_form: function (magnet) {
      document.querySelector(".g-button[data-button-id=b13]").click();
      setTimeout(function () {
        document.querySelector("#_disk_id_2").click();
        setTimeout(function () {
          document.querySelector("#share-offline-link").value = magnet;
          document.querySelector(".g-button[data-button-id=b65]").click();
        }, 500);
      }, 1500);
    }
  },
  115: {
    type: 1,
    re: /115\.com/,
    fill_form: function (link) {
      var rsc = setInterval(function () {
        if (document.readyState == "complete") {
          clearInterval(rsc);
          setTimeout(function () {
            Core["OFFL5Plug"].OpenLink();
            setTimeout(function () {
              $("#js_offline_new_add").val(link);
            }, 300);
          }, 1000);
        }
      }, 400);
    }
  },
  letv: {
    type: 1,
    re: /cloud\.letv\.com/,
    fill_form: function (link) {
      setTimeout(function () {
        $("#offline-btn").click();
        setTimeout(function () {
          $("#offline_clear_complete").prev().click();
          setTimeout(function () {
            $("#offline-add-link").val(link);
          }, 500);
        }, 1000);
      }, 2000);
    }
  },
  furk: {
    type: 1,
    re: /www\.furk\.net/,
    fill_form: function (link) {
      setTimeout(function () {
        $("#url").val(link.replace("magnet:?xt=urn:btih:", ""));
      }, 1500);
    }
  },
  360: {
    type: 1,
    re: /yunpan\.360\.cn\/my/,
    fill_form: function (link) {
      yunpan.cmdCenter.showOfflineDia();
      setTimeout(function () {
        $(".offdl-btn-create").click();
        setTimeout(function () {
          $("#offdlUrl").val(link);
        }, 500);
      }, 1000);
    }
  },
  uc: {
    type: 1,
    re: /disk\.yun\.uc\.cn\//,
    fill_form: function (link) {
      setTimeout(function () {
        $("#newuclxbtn_index").click();
        setTimeout(function () {
          $("#uclxurl").val(link);
        }, 1000);
      }, 1200);
    }
  },

};

var offline_sites = {
  baidu: {
    url: "http://pan.baidu.com/disk/home",
    name: "百度云",
    enable: true
  },
  115: {
    name: "115离线",
    url: "http://115.com/?tab=offline&mode=wangpan",
    enable: true,
  },
  varv: {
    name: "乐视云",
    url: "http://cloud.letv.com/webdisk/home/index",
    enable: false
  },
  360: {
    name: "360云",
    url: "http://yunpan.360.cn/my/",
    enable: false
  },
  uc: {
    name: "UC离线",
    url: "http://disk.yun.uc.cn/",
    enable: false
  },
  furk: {
    name: "Furk",
    url: "https://www.furk.net/users/files/add",
    enable: true
  },
};
var common = {
  add_style: function () {
    GM_addStyle([
      "#nong-table{border-collapse: initial !important;background-color: white !important;text-align: center !important;margin:10px auto;color:#666 !important;font-size:13px;text-align:center !important;border: 1px solid #cfcfcf !important;border-radius: 10px !important;}",
      "#nong-table a {margin-right: 5px !important;color:blue}",
      "#nong-table a:hover {color:#d20f00 !important;}",
      "#nong-table th,#nong-table td{text-align: inherit !important;height:30px;padding:0 1em 0 !important;}",
      ".nong-row{text-align: inherit !important;height:30px;padding:0 1em 0 !important;border: 1px solid #EFEFEF !important;}",
      ".nong-row:hover{background-color: #dae8ff !important;}",
      ".nong-offline-download{color: rgb(0, 180, 30) !important;}",
      ".nong-offline-download:hover{color:red !important;}",
    ].join(""));
  },
  handle_copy_event: function (event) {
    event.target.innerHTML = "成功";
    GM_setClipboard(event.target.href);
    setTimeout(function () {
      event.target.innerHTML = "复制";
    }, 1000);
    event.preventDefault(); //阻止跳转
  },
  handle_dl_event: function (event) {
    var mag = event.target.parentElement.parentElement.parentElement.getAttribute("mag");
    console.info("磁链接", mag);
    //console.log(0);
    GM_setValue("magnet", mag);
  },

  reg_event: function () {
    var selector_event_map = [{
      selector: ".nong-copy",
      type: "click",
      fn: this.handle_copy_event
    }, {
      selector: ".nong-offline-download",
      type: "click",
      fn: this.handle_dl_event
    }];
    selector_event_map.forEach(function (obj) {
      Array.from(document.querySelectorAll(obj.selector)).forEach(function (elem) {
        elem.addEventListener(obj.type, obj.fn);
      })
    });
    /*
    for (var obj of selector_event_map) {
      for (var elem of document.querySelectorAll(obj.selector)) {
        //console.log(elem, obj.type, obj.fn);
        elem.addEventListener(obj.type, obj.fn);
      }
    }*/
  },
  parsetext: function (text) {
    var doc = null;
    try {
      doc = document.implementation.createHTMLDocument("");
      doc.documentElement.innerHTML = text;
      return doc;
    }
    catch (e) {
      alert("parse error");
    }
  },
};
var magnet_table = {
  template: {
    create_head: function (src) {
      var a = document.createElement("tr");
      a.className = "nong-row";
      a.id = "nong-head";
      var head_str = [
        "大小",
        "操作",
        "离线下载"
      ];
      var th_list = [document.createElement("th"), document.createElement("th"), document.createElement("th"), document.createElement("th")];

      var select_box = document.createElement("select");
      var option_str = my_search.search_name_string;
      //console.log("get", GM_getValue("search_index"));
      var index = GM_getValue("search_index", 0);
      var op_value = 0;
      option_str.forEach(function (str) {
        var op = document.createElement("option");
        op.value = op_value;
        op.textContent = str;
        if (index == op_value) {
          op.setAttribute("selected", "selected");
        }
        op_value++;
        select_box.appendChild(op);
      });
      /*
      for (var str of option_str) {
        var op = document.createElement("option");
        op.value = op_value;
        op.textContent = str;
        if (index == op_value) {
          op.setAttribute("selected", "selected");
        }
        op_value++;
        select_box.appendChild(op);
      }*/
      select_box.addEventListener("change", function (e) {
        GM_setValue("search_index", this.value);
        run();
      });
      th_list[0].appendChild(select_box);

      th_list[1].appendChild(document.createElement("a"));
      th_list[1].lastChild.setAttribute("href", src);
      th_list[1].lastChild.setAttribute("target", "_blank");
      th_list[1].lastChild.textContent = head_str[0];

      th_list[2].appendChild(document.createElement("a"));
      th_list[2].lastChild.textContent = head_str[1];

      th_list[3].appendChild(document.createElement("a"));
      th_list[3].lastChild.textContent = head_str[2];

      th_list.forEach(function (th) {
        a.appendChild(th);
      });
      /*
      for (var th of th_list) {
        a.appendChild(th);
      }
      */
      return a;
    },
    create_row: function (data) {
      var tr = document.createElement("tr");
      tr.className = "nong-row";
      tr.setAttribute("mag", data.mag);
      var td = document.createElement("td");
      var list = [this.create_info(data.title, data.mag), this.create_size(data.size, data.src), this.create_operation(data.mag), this.create_offline()];
      list.forEach(function (elem) {
        var c = td.cloneNode(true);
        c.appendChild(elem);
        tr.appendChild(c);
      });
      /*
      for (var elem of [this.create_info(data.title, data.mag), this.create_size(data.size, data.src), this.create_operation(data.mag), this.create_offline()]) {
        var c = td.cloneNode(true);
        c.appendChild(elem);
        tr.appendChild(c);
      }
      */
      return tr;
    },
    create_row_for_sukebei: function (data) {
      var tr = document.createElement("tr");
      tr.className = "nong-row";
      tr.setAttribute("mag", data.mag);
      var td = document.createElement("td");
      var append_elems = [

        (function (title, src, self) {
          return self.create_info(title, src);
        })(data.title, data.src, this),

        (function (size, src, self) {
          return self.create_size(size, src);
        })(data.size, data.src, this),

        (function (torrent_url, self) {
          var operate = self.create_operation(torrent_url);
          operate.firstChild.textContent = "种子";
          operate.firstChild.setAttribute("class", "nong-copy-sukebei");
          operate.firstChild.setAttribute("target", "_blank");
          return operate;
        })(data.torrent_url, this),

        (function (self) {
          var div = document.createElement("div");
          div.textContent = "暂不支持离线下载";
          return div;
        })(this)];
      append_elems.forEach(function (elem) {
        var c = td.cloneNode(true);
        c.appendChild(elem);
        tr.appendChild(c);
      });
      /*
      for (var elem of append_elems) {
        var c = td.cloneNode(true);
        c.appendChild(elem);
        tr.appendChild(c);
      }
      */
      return tr;
    },
    create_info: function (title, mag) {
      var a = this.info.cloneNode(true);
      a.firstChild.textContent = title.length < max_title_length ? title : title.substr(0, max_title_length) + "...";
      a.firstChild.href = mag;
      a.title = title;
      return a;
    },
    create_size: function (size, src) {
      var a = this.size.cloneNode(true);
      a.textContent = size;
      a.href = src;
      return a;
    },
    create_operation: function (mag) {
      var a = this.operation.cloneNode(true);
      a.firstChild.href = mag;
      return a;
    },
    create_offline: function () {
      var a = this.offline.cloneNode(true);
      a.className = "nong-offline";
      return a;
    },

    info: (function () {
      var a = document.createElement("div");
      var b = document.createElement("a");
      b.textContent = "name";
      b.href = "src";
      b.target = "_blank";
      a.appendChild(b);
      return a;
    })(),
    size: function () {
      var a = document.createElement("a");
      a.textContent = "size";
      a.target = "_blank";
      return a;
    }(),
    operation: (function () {
      var a = document.createElement("div");
      var copy = document.createElement("a");
      copy.className = "nong-copy";
      copy.textContent = "复制";
      a.appendChild(copy);
      return a;
    })(),
    offline: (function () {
      var a = document.createElement("div");
      var b = document.createElement("a");
      b.className = "nong-offline-download";
      b.target = "_blank";
      for (var k in offline_sites) {
        if (offline_sites[k].enable) {
          var c = b.cloneNode(true);
          c.href = offline_sites[k].url;
          c.textContent = offline_sites[k].name;
          a.appendChild(c);
        }
      }
      return a;
    })(),
  },
  generate_head: function () {
    var tab = document.createElement("table");
    tab.id = "nong-table";
    tab.appendChild(this.template.create_head("https://greasyfork.org/zh-CN/scripts/8392-%E6%8C%8A"));
    return tab;
  },
  generate: function (src, data) {
    //console.log(src);
    //console.log(data);
    var tab = document.querySelector("#nong-table");
    tab.querySelector("#nong-head th a").href = src;
    if (src.match("nyaa.si")) {
      data.forEach((d) => {
        tab.appendChild(this.template.create_row_for_sukebei(d));
      });
      /*
      for (var d of data) {
        tab.appendChild(this.template.create_row_for_sukebei(d));
      }
      */
    }
    else {
      data.forEach((d) => {
        tab.appendChild(this.template.create_row(d));
      });
      /*
      for (var d of data) {
        tab.appendChild(this.template.create_row(d));
      }
      */
    }
    return tab;
  },

};
var my_search = {
  current: function (kw, cb) {
    var search = my_search[GM_getValue("search_index", 0)];
    try {
      return search(kw, cb);
    }
    catch (e) {
      this.search_error();
    }
  },
  search_error: function (r) {
    alert("搜索出现错误,请检查网络");
  },
  search_name_string: ["btso", "btdb", "nyaa.si", "btkitty","torrentkitty","btlibrary"],
    0: function (kw, cb) {
        GM_xmlhttpRequest({
            method: "GET",
            url: "https://btso.pw/search/" + kw,
            onload: function (result) {
                let doc = common.parsetext(result.responseText);
                let data = [];
                let t = doc.getElementsByClassName("data-list")[0];
                if (t) {
                    for (let elem of t.getElementsByTagName("a")) {
                        if (!elem.className.match("btn")) {
                            data.push({
                                "title": elem.title,
                                "mag": "magnet:?xt=urn:btih:" + elem.outerHTML.replace(/.*hash\//, "").replace(/" .*\n.*\n.*\n.*/, ""),
                                "size": elem.nextElementSibling.textContent,
                                "src": elem.href,
                            });
                        }
                    }
                }
                else {
                    data.push({
                        "title": "没有找到磁链接",
                        "mag": "",
                        "size": "0",
                        "src": result.finalUrl,
                    });
                }
                cb(result.finalUrl, data);
            },
            onerror: function (e) {
                console.error(e);
                throw "search error";
            }
        });
    },
    1: function (kw, cb) {
        GM_xmlhttpRequest({
            method: "GET",
            url: "http://btdb.to/q/" + kw + "/",
            onload: function (result) {
                let doc = common.parsetext(result.responseText);
                let data = [];
                let t = doc.getElementsByClassName("item-title");
                if (t) {
                    for (let elem of t) {
                        data.push({
                            "title": elem.firstChild.title,
                            "mag": elem.nextElementSibling.firstElementChild.href,
                            "size": elem.nextElementSibling.children[1].textContent,
                            "src": "https://btdb.in" + elem.firstChild.getAttribute("href"),
                        });
                    }
                }
                else {
                    data.push({
                        "title": "没有找到磁链接",
                        "mag": "",
                        "size": "0",
                        "src": result.finalUrl,
                    });
                }

                cb(result.finalUrl, data);
            },
            onerror: function (e) {
                console.error(e);
                throw "search error";
            }
        });
    },
    2: function (kw, cb) {
        GM_xmlhttpRequest({
            method: "GET",
            url: "https://sukebei.nyaa.si/?f=0&c=0_0&q=" + kw,
            onload: function (result) {
                let doc = common.parsetext(result.responseText);
                let data = [];
                let t = doc.querySelectorAll("tr.default");
                if (t.length!==0) {
                    for (let elem of t) {
                        data.push({
                            "title": elem.querySelector("td:nth-child(2)>a:nth-child(1)").title,
                            "mag": "",
                            "torrent_url": "https://nyaa.si" + elem.querySelector("td:nth-child(3)>a:nth-child(1)").href,
                            "size": elem.querySelector("td:nth-child(4)").textContent,
                            "src": "https://nyaa.si" + elem.querySelector("td:nth-child(2)>a:nth-child(1)").href,
                        });
                    }
                }
                else {
                    data.push({
                        "title": "没有找到磁链接",
                        "mag": "",
                        "torrent_url": "",
                        "size": "0",
                        "src": result.finalUrl,
                    });
                }

                cb(result.finalUrl, data);
            },
            onerror: function (e) {
                console.error(e);
                throw "search error";
            }
        });
    },
    3: function (kw, cb) {
        GM_xmlhttpRequest({
            method: "POST",
            url: "http://btkitty.pet/",
            data: "keyword=" + kw+"&hidden=true",
            headers: {
                "Content-Type": "application/x-www-form-urlencoded"
            },
            onload: function (result) {
                let doc = common.parsetext(result.responseText);
                let data = [];
                let t = doc.getElementsByClassName("list-con");
                if (t) {
                    for (let elem of t) {
                        data.push({
                            "title": elem.querySelector("dt a").textContent,
                            "mag": elem.querySelector("dd a").href,
                            "size": elem.querySelector(".option span:nth-child(3) b").textContent,
                            "src": elem.querySelector("dt a").href,
                        });
                    }
                }
                else {
                    data.push({
                        "title": "没有找到磁链接",
                        "mag": "",
                        "size": "0",
                        "src": result.finalUrl,
                    });
                }
                cb(result.finalUrl, data);
            },
            onerror: function (e) {
                console.error(e);
                throw "search error";
            }
        });
    },
    4: function (kw, cb) {
        GM_xmlhttpRequest({
            method: "GET",
            url: "https://www.torrentkitty.tv/search/"+kw,
            onload: function (result) {
                let doc = common.parsetext(result.responseText);
                let data = [];
                let t = doc.querySelectorAll("#archiveResult tr");
                if (t) {
                		t = Array.slice(t,1,t.length)
                    for (let elem of t) {
                        data.push({
                            "title": elem.querySelector(".name").textContent,
                            "mag": elem.querySelector(".action>a:nth-child(2)").href,
                            "size": elem.querySelector(".size").textContent,
                            "src": elem.querySelector(".action>a:nth-child(1)").href,
                        });
                    }
                }
                else {
                    data.push({
                        "title": "没有找到磁链接",
                        "mag": "",
                        "size": "0",
                        "src": result.finalUrl,
                    });
                }
                cb(result.finalUrl, data);
            },
            onerror: function (e) {
                console.error(e);
                throw "search error";
            }
        });
    },
    5: function (kw, cb) {
        GM_xmlhttpRequest({
            method: "POST",
            url: "http://btlibrary.pw",
            data: "keyword=" + kw,
            headers: {
                "Content-Type": "application/x-www-form-urlencoded"
            },
            onload: function (result) {
                let doc = common.parsetext(result.responseText);
                let data = [];
                let t = doc.querySelectorAll(".item");
                if (t) {
                    for (let elem of t) {
                        data.push({
                            "title": elem.querySelector(".item-title>a").textContent,
                            "mag": elem.querySelector(".item-detail>span:nth-child(1)>a").href,
                            "size": elem.querySelector(".item-detail>span:nth-child(3)>b").textContent,
                            "src": elem.querySelector(".item-title>a").href,
                        });
                    }
                }
                else {
                    data.push({
                        "title": "没有找到磁链接",
                        "mag": "",
                        "size": "0",
                        "src": result.finalUrl,
                    });
                }
                cb(result.finalUrl, data);
            },
            onerror: function (e) {
                console.error(e);
                throw "search error";
            }
        });
    },
};

var display_table = function (vid, insert_where) {
  common.add_style();
  if (!document.querySelector("#nong-head")) {
    var tab_with_head = magnet_table.generate_head();
    if (typeof insert_where === "string") {
      var elem = document.querySelector(insert_where);
      //console.log("display_table", tab, elem);
      if (elem) {
        elem.parentElement.insertBefore(tab_with_head, elem);
      }
    }
    else if (typeof insert_where === "function") {
      insert_where(tab_with_head);
    }
    else {
      console.error("插入表格错误");
      return;
    }
  }
  else {
    var head = document.querySelector("#nong-head");
    Array.from(document.querySelectorAll(".nong-row")).forEach(function (row) {
      if (row !== head) {
        row.parentElement.removeChild(row);
      }
    });
  }
  my_search.current(vid, function (data, src) {
    var tab = magnet_table.generate(data, src);
    common.reg_event();
  });
};

var vid_mode = function (v) {
  var vid = "";
  try {
    vid = v.vid();
  }
  catch (error) {
    vid = "";
    console.error("没有找到番号", v.vid.toString());
  }
  if (vid) {
    console.info("番号:", vid);
    display_table(vid, v.insert_where);
  }
};

var dl_mode = function (v) {

  var mag = GM_getValue("magnet", "");
  //console.info(1, "开始离线下载", mag);
  if (mag) {
    var script = document.createElement("script");
    script.setAttribute("type", "text/javascript");
    script.innerHTML = "(" + v.fill_form.toString() + ")(\"" + mag + "\")";
    document.body.appendChild(script);
    //console.info(info);
  }
  GM_setValue("magnet", "");
};

var run = function () {
  max_title_length = GM_getValue("max_title_length", 40);
  var main_keys = Object.keys(main);
  for (var i = 0; i < main_keys.length; i++) {
    var v = main[main_keys[i]];

    if (v.re && v.re.test(location.href)) {
      if (v.type === 0) {

        //----

        //for javlibrary
        if (main_keys[i] === "javlibrary") {
          if (document.querySelector("#adultwarningprompt")) {
            document.querySelectorAll("#adultwarningprompt input")[0].click();
          }
        }
        //----

        vid_mode(v);
      }
      else if (v.type == 1) {
        dl_mode(v);
      }
      break;
    }
  }
};
var max_title_length = GM_getValue("max_title_length", 40);
var set_max_title_length = function () {
  var len = prompt("请输入你想要的标题长度", GM_getValue("max_title_length", 40));
  if (len !== null && len !== "") {
    GM_setValue("max_title_length", len);
    run();
  }
};

GM_registerMenuCommand("挊-标题长度", set_max_title_length);
run();