Sleazy Fork is available in English.

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

Від 05.07.2015. Дивіться остання версія.

// ==UserScript==
// @name        挊
// @namespace   撸
// @description 自动获取磁链接并自动离线下载
// @include     http://www.javfee.com/*
// @include     http://www.avmask.com/*
// @include     http://www.avmemo.com/*
// @include     http://www.javlibrary.com/*
// @include     http://www.libredmm.com/products/*
// @include     http://www.dmm.co.jp/digital/videoa/*
// @include     http://www.minnano-av.com/av*
// @include     http://www.oisinbosoft.com/dera/*
// @include     http://www.javbus.co/*
// @include     http://avdb.la/movie/*
// @include     http://www.141jav.com/view/*
// @include     http://av4you.net/work/*.htm
// @include     http://pan.baidu.com/disk/home
// @include     http://115.com/?tab=offline&mode=wangpan
// @include     http://cloud.letv.com/webdisk/home/index
// @include     http://disk.yun.uc.cn/
// @include     https://www.furk.net/users/files/add
// @include     *.yunpan.360.cn/my/
// @include     http://www.btcherry.com/search?keyword=*
// @include     https://btdigg.org/search*
// @include     http://www.shousibaocai.com/search/*
// @include     http://www.shousibaocai.com/list/*
// @include     http://www.btava.com/magnet/detail/hash/*
// @version     1.19
// @run-at      document-end
// @grant       GM_xmlhttpRequest
// @grant       GM_setClipboard
// @grant       GM_setValue
// @grant       GM_getValue
// @grant       GM_addStyle
// ==/UserScript==


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
  },
  letv: {
    name: '乐视云',
    url: 'http://cloud.letv.com/webdisk/home/index',
    enable: false
  },
  360: {
    name: '360云',
    url: 'http://yunpan.360.cn/my/',
    enable: true
  },
  uc: {
    name: 'UC离线',
    url: 'http://disk.yun.uc.cn/',
    enable: true
  },
  furk: {
    name: 'Furk',
    url: 'https://www.furk.net/users/files/add',
    enable: false
  },
};


var $ = function (selector) {
  var result = document.querySelectorAll(selector);
  if (selector[0] == '#') {
    return result[0];
  } 
  else {
    return result;
  }
};

var finalurl = '';
var $after = function (target, newnode) {
  target.parentElement.insertBefore(newnode, target.nextElementSibling);
};
var $eafter = function (selector, target, func) {
  var result = document.querySelectorAll(selector);
  //isdeep 是否克隆子元素
  var tmp = null;
  for (var i = 0; i < result.length; i++) {
    tmp = target.cloneNode(true);
    if (result[i].nextElementSibling === null) {
      result[i].parentElement.appendChild(tmp);
    }
    else {
      result[i].parentElement.insertBefore(tmp, result[i].nextElementSibling);
    }
    tmp.setAttribute('data', func(result[i]));
  }
};
var $eappend = function (selector, target, func) {
  var result = document.querySelectorAll(selector);
  for (var i = 0; i < result.length; i++) {
    result[i].appendChild(target.cloneNode(true));
    func(result[i]);
  }
};

var insert_js = function (value, func) {
  var js = document.createElement('script');
  js.innerHTML = '(' + func.toString() + ')(\'' + value + '\');';
  //alert('通过0');
  document.body.appendChild(js);
  
};
var add_style = function (css) {
  if (css) {
    GM_addStyle(css);
  } 
  else {
    GM_addStyle([
    '#magnet-tab{text-align: center;}',
    '#magnet-tab table{margin:10px auto;border:1px solid #cad9ea;color:#666;font-size:12px;text-align:center;background-color: #F3F3F3;}',
    '.magnet-th,.magnet-td{height:30px; border:1px solid #cad9ea;padding:0 1em 0;}',
    '.magnet-copy{color:#08c;}',
    '.offline-div{text-align: center;}',
    '.magnet-download{color: rgb(0, 180, 30);margin-right: 4px;}',
    '.magnet-td>a:hover{color:red;}',
    ].join(''));
  }
};

//------------

var create_offline_table = function (parent, child) {
  for (var key in offline_sites) {
    if(offline_sites[key].enable === false){
      continue;
    }
    var tmp = child.cloneNode();
    tmp.href = offline_sites[key].url;
    tmp.textContent = offline_sites[key].name;
    parent.appendChild(tmp);
  }
  return parent;
};
var init_search_offline = function (callback) {
  var link = document.createElement('a');
  link.className = 'magnet-download';
  link.target = '_blank';
  var offline = create_offline_table(document.createElement('div'), link);
  offline.className = 'offline-div';
  callback(offline);
  add_style();
  reg_event();
};
// start : create_wrapper
var create_wrapper = function (data) {
    var create_table_th = function () {
      var tr = document.createElement('tr');
      var th = document.createElement('th');
      th.className = 'magnet-th';
      tr.appendChild((function () {
        var t = th.cloneNode();
        var a = document.createElement('a');
        a.id = 'switch-engine';
        a.href = 'javascript:void(0);';
        a.title = '点击切换搜索结果';
        a.textContent = '标题';
        t.appendChild(a);
        return t;
      }) ());
      var strings = [
        '大小',
        '操作',
        '离线下载'
      ];
      for (var i = 0; i < strings.length; i++) {
        var t = th.cloneNode();
        t.textContent = strings[i];
        tr.appendChild(t);
      }
      return tr;
  };
  var create_table_td = function (data) {
    var tr = document.createElement('tr');
    var td = document.createElement('td');
    td.className = 'magnet-td';
    tr.appendChild((function () {
      var title = td.cloneNode();
      title.setAttribute('title', data.title);
      title.textContent = (function (str) {
                            return str.length > 30 ? str.slice(0, 30) + '...' : str;
                          })(data.title);
      return title;
    }) ());
    tr.appendChild((function () {
      var size = td.cloneNode();
      size.textContent = data.size;
      return size;
    }) ());
    tr.appendChild((function () {
      var copy = td.cloneNode();
      var link = document.createElement('a');
      link.className = 'magnet-copy';
      link.textContent = '复制';
      link.href = data.magnet;
      copy.appendChild(link);
      return copy;
    }) ());
    tr.appendChild((function () {
      var link = document.createElement('a');
      link.className = 'magnet-download';
      link.target = '_blank';
      var ol = create_offline_table(td.cloneNode(), link);
      ol.setAttribute('data', data.magnet);
      return ol;
    }) ());
    return tr;
  };
  //--------------
  var table = document.createElement('table');
  table.appendChild(create_table_th());
  if (data) {
    for (var i = 0; i < data.length; i++) {
      table.appendChild(create_table_td(data[i]));
    }
  }
  else {
    var p = document.createElement('p');
    p.textContent = '没有找到...';
    table.appendChild(p);
  }
  var wrapper = document.createElement('div');
  wrapper.id = 'magnet-tab';
  var title = document.createElement('h4');
  title.innerHTML = '来自<a id= \'magnet-href\' href=\''+ finalurl +'\' target=\'_blank\' style=\'color: #FF10FF;\'>'+ current_search.get().name +'</a>搜索结果:';
  wrapper.appendChild(title);
  wrapper.appendChild(table);
  return wrapper;
};
//end : create_wrapper

var current_search =  function(){
  this.get = function(){
    if(this.index == this.sites.length){
      this.index = 0;
    }
    return this.sites[this.index];
  };
  this.switch = function(){
    this.index += 1;
    run();
  };
  this.index = 0;
  this.sites = [
    {
      name:'btava',
      url:'http://www.btava.com/search/',
      s:function(kw,cb){
        GM_xmlhttpRequest({
          method: 'GET',
          url: this.url+kw,
          onload: function (result) {
            finalurl = result.finalUrl;
            var doc = document.implementation.createHTMLDocument('');
            doc.documentElement.innerHTML = result.responseText;
            var data = [];
            var t = doc.getElementsByClassName('data-list') [0];
            if (t) {
              var elems = t.getElementsByTagName('a');
              for (var i = 0; i < elems.length; i++) {
                data.push({
                  'title': elems[i].title,
                  'magnet': 'magnet:?xt=urn:btih:' + elems[i].href.replace(/.*hash\//, ''),
                  'size': elems[i].nextElementSibling.textContent
                });
              }
               cb(data);
            } 
            else {
             cb(null);
            }
          },
          onerror: function (e) {
            console.log(e);
          }
        });
      }
    },
    {
      name:'diggbt',
      url:'http://diggbt.net/',
      s:function(kw,cb){
        GM_xmlhttpRequest({
          method: "POST",
          url: this.url,
          data: "s="+kw,
          headers: {
            "Content-Type": "application/x-www-form-urlencoded"
          },
          onload: function(result) {
            finalurl = result.finalUrl;
            var doc = document.implementation.createHTMLDocument('');
            doc.documentElement.innerHTML = result.responseText;
            var data = [];
            var t = doc.getElementsByClassName('list-con') [0];
            if (t) {
              var elems = t.getElementsByClassName('item-title');
              for (var i = 0; i < elems.length; i++) {
                data.push({
                  'title': elems[i].getElementsByTagName('a')[0].textContent,
                  'magnet': elems[i].nextElementSibling.getElementsByTagName('a')[0].href,
                  'size': elems[i].nextElementSibling.getElementsByTagName('b')[1].textContent
                });
              }
               cb(data);
            } 
            else {
             cb(null);
            }
          },
          onerror: function (e) {
            console.log(e);
          }
        });
      }
    },
    {
      name: 'btlibrary',
      url: 'http://btlibrary.org/',
      s: function(kw,cb){
        GM_xmlhttpRequest({
          method: "POST",
          url: this.url,
          data: "s="+kw,
          headers: {
            "Content-Type": "application/x-www-form-urlencoded"
          },
          onload: function(result) {
            finalurl = result.finalUrl;
            var doc = document.implementation.createHTMLDocument('');
            doc.documentElement.innerHTML = result.responseText;
            var data = [];
            var t = doc.getElementsByClassName('list-content') [0];
            if (t) {
              var elems = t.getElementsByClassName('item-title');
              for (var i = 0; i < elems.length; i++) {
                data.push({
                  'title': elems[i].getElementsByTagName('a')[0].textContent,
                  'magnet': elems[i].nextElementSibling.getElementsByTagName('a')[0].href,
                  'size': elems[i].nextElementSibling.getElementsByTagName('b')[1].textContent
                });
              }
               cb(data);
            } 
            else {
             cb(null);
            }
          },
          onerror: function (e) {
            console.log(e);
          }
        });
      }
    }
  ];
}
var current_search =  new current_search();

var gethash = function (index,vid, callback) {
  add_style();
  search_sites[index].s(vid,function(data){
    callback(create_wrapper(data));
    reg_event();
  });
};
var handle_event = function (event) {
  if (event.target.className == 'magnet-copy') {
    event.target.innerHTML = '成功';
    GM_setClipboard(event.target.href);
    setTimeout(function () {
      event.target.innerHTML = '复制';
    }, 1000);
    event.preventDefault(); //阻止跳转
  } 
  else if (event.target.className == 'magnet-download') {
    GM_setValue('magnet', event.target.parentElement.getAttribute('data'));
  }
}
var reg_event = function () {
  var mc = $('.magnet-copy');
  for (var i = 0; i < mc.length; i++) {
    mc[i].addEventListener('click', handle_event, false);
  }

  var md = $('.magnet-download');
  for (var i = 0; i < md.length; i++) {
    md[i].addEventListener('click', handle_event, false);
  }

  var se =  document.getElementById('switch-engine');
  if(se){
    se.addEventListener('click', function () {
        var tab = document.getElementById('magnet-tab');
        if(tab){
          tab.parentElement.removeChild(tab)
        }
        current_search.switch();
    }, false);
  }
};
var main = {
  //av信息查询 类
  javfee: {
    regexp: /javfee.*movie.*/,
    vid: function () {
      return $('.header') [0].nextElementSibling.innerHTML;
    },
    proc: function (wrapper) {
      $after($('#movie-share'), wrapper);
    }
  },
  avmask: {
    regexp: /avmask.*movie/,
    vid: function () {
      return $('.header') [0].nextElementSibling.innerHTML;
    },
    proc: function (wrapper) {
      $after($('#movie-share'), wrapper);
    }
  },
  avmemo: {
    regexp: /avmemo.*movie.*/,
    vid: function () {
      return $('.header') [0].nextElementSibling.innerHTML;
    },
    proc: function (wrapper) {
      $after($('#movie-share'), wrapper);
    }
  },
  javlibrary: {
    regexp: /javlibrary.*\?v=.*/,
    vid: function () {
      return $('#video_id').getElementsByClassName('text') [0].innerHTML;
    },
    proc: function (wrapper) {
      $after($('#video_favorite_edit'), wrapper);
    }
  },
  libredmm: {
    regexp: /libredmm/,
    vid: function () {
      return location.href.match(/products\/(.*)/)[1];
    },
    proc: function (wrapper) {
      $after($('.container')[0],wrapper)
    }
  },
  dmm: {
    regexp: /dmm\.co\.jp/,
    vid: function () {
      var result = location.href.replace(/.*cid=/, '').replace(/\/\??.*/, '').match(/[^h_0-9].*/);
      if (result[0]) {
        return result[0].replace('00', '');
      } 
      else {
        return '';
      }
    },
    proc: function (wrapper) {
      $after($('.lh4') [0], wrapper)
    }
  },
  minnano: {
    regexp: /minnano-av/,
    vid: function () {
      var elems = $('.t11');
      var r = '';
      for (var i = 0; i < elems.length; i++) {
        if (elems[i].textContent == '品番') {
          r = elems[i].nextElementSibling.textContent;
          break;
        }
      }
      return r;
    },
    proc: function (wrapper) {
      var tmp = (function () {
        var a = $('table');
        for (var i = 0; i < a.length; i++) {
          if (a[i].bgColor == '#EEEEEE') {
            return a[i];
          }
        }
      }) ();
      $after(tmp, wrapper);
    }
  },
  oisinbosoft: {
    regexp: /oisinbosoft/,
    vid: function () {
      var r = location.pathname.replace(/.*\/+/, '').replace('.html', '');
      if (r.indexOf('-') == r.lastIndexOf('-')) {
        return r;
      } 
      else {
        return r.replace(/\w*-?/, '');
      }
    },
    proc: function (wrapper) {
      add_style('#magnet-tab table{clear:both;}');
      $after($('#detail_info'), wrapper);
    }
  },
  javbus: {
    regexp: /javbus/,
    vid: function () {
      var result = $('.movie-code');
      if (result) {
        return result[0].textContent;
      } 
      else {
        return '';
      }
    },
    proc: function (wrapper) {
      $after($('.movie') [0].parentElement, wrapper);
    }
  },
  avdb: {
    regexp: /avdb\.la/,
    vid: function () {
      return $('.info') [0].firstElementChild.innerHTML.replace(/<.*>/, '').trim();
    },
    proc: function (wrapper) {
      wrapper.className = 'movie';
      var tmp = $('#downs');
      $after($('#downs').previousElementSibling, wrapper);
    }
  },
  jav141: {
    regexp: /141jav/,
    vid: function () {
      return location.href.match(/view\/(.*)\//) [1];
    },
    proc: function (wrapper) {
      $after($('.dlbtn') [0].previousElementSibling, wrapper);
    },
  },
  av4you: {
    regexp: /av4you/,
    vid: function () {
      return $('.star-detail-name') [0].textContent.trim();
    },
    proc: function (wrapper) {
      $after($('.star-detail') [0], wrapper);
    }
  },
  //网盘下载 类
  baidu: {
    regexp: /pan\.baidu\.com/,
    proc: function (magnet) {
      $('.icon-btn-download').click();
      setTimeout(function () {
        $('#_disk_id_24').click();
        setTimeout(function () {
          $('#_disk_id_13').click();
          $('#share-offline-link').val(magnet);
        }, 500);
      }, 500);
    }
  },
  115: {
    regexp: /115\.com/,
    proc: function (link) {
      //alert(link);
      //alert('通过1');
      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: {
    regexp: /cloud\.letv\.com/,
    proc: 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: {
    regexp: /www\.furk\.net/,
    proc: function (link) {
      setTimeout(function () {
        $('#url').val(link.replace('magnet:?xt=urn:btih:', ''));
      }, 1500);
    }
  },
  360: {
    regexp: /yunpan\.360\.cn\/my/,
    proc: function (link) {
      yunpan.cmdCenter.showOfflineDia();
      setTimeout(function () {
        $('.offdl-btn-create').click();
        setTimeout(function () {
          $('#offdlUrl').val(link)
        }, 500)
      }, 1000);
    }
  },
  uc: {
    regexp: /disk\.yun\.uc\.cn\//,
    proc: function (link) {
      setTimeout(function () {
        $('#newuclxbtn_index').click();
        setTimeout(function(){
          $('#uclxurl').val(link);
        },1000)
      },1200)
    }
  },
  //磁链接搜索 类
  btcherry: {
    regexp: /btcherry/,
    is_search: true,
    proc: function (div) {
      $eafter('.r div a', div, function (elem) {
        //elem 等于 document.querySelectorAll(.r div a)的成员
        return elem.href;
      });
    }
  },
  btdigg: {
    regexp: /btdigg/,
    is_search: true,
    proc: function (div) {
      $eafter('.snippet', div, function (elem) {
        return elem.parentElement.getElementsByClassName('ttth') [0].firstElementChild.href;
      });
    }
  },
  shousibaocai: {
    regexp: /shousibaocai/,
    is_search: true,
    proc: function (div) {
      $eafter('.tail', div, function (elem) {
        return elem.getElementsByTagName('a') [0].href;
      });
    }
  },
  btava: {
    regexp: /btava/,
    is_search: true,
    proc: function (div) {
      div.setAttribute('data',$('#magnetLink').value)
      $after($('#magnetLink'),div);
      /*$eafter('.data-list .date', div, function (elem) {
        return 'magnet:?xt=urn:btih:' + elem.parentElement.getElementsByTagName('a') [0].href.match(/hash\/(.*)/) [1];
      });*/
    }
  }
};
var run = function(){
  for (var key in main) {
    if (location.href.match(main[key].regexp)) {
      if (main[key].vid) {
        add_style();
        current_search.get().s(main[key].vid(),function(data){
          main[key].proc(create_wrapper(data));
          reg_event();
        });
      }
      else if (main[key].is_search) {
        init_search_offline(main[key].proc);
      }
      else {
        var magnet = GM_getValue('magnet');
        GM_setValue('magnet', '');
        if (magnet) {
          //alert('通过-1');
          insert_js(magnet, main[key].proc);
        }
        else{
          //alert('没有磁链接');
        }
      }
      break;
    }
  }
};
run();