一键离线下载

一键自动将磁链、bt种子或其他下载资源离线下载至网盘

当前为 2016-11-08 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Easy offline
  3. // @name:zh-CN 一键离线下载
  4. // @name:zh-TW 一鍵離綫下載
  5. // @description Be easy to find out all magnet links and torrents and video links in current page, and stream them from cloud storage automatically.
  6. // @description:zh-CN 一键自动将磁链、bt种子或其他下载资源离线下载至网盘
  7. // @description:zh-TW 一鍵自動將磁鏈、bt種子或其他下載資源離綫下載至網槃
  8. // @namespace http://tampermonkey.net/
  9. // @require http://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js
  10. // @version 1.0.29
  11. // @author Hoothin
  12. // @mail rixixi@gmail.com
  13. // @include http*://*/*
  14. // @exclude http*://www.baidu.*
  15. // @exclude http*://www.google.*
  16. // @exclude http*://www.bing.*
  17. // @exclude http*://github.com/*
  18. // @include http*://pan.baidu.com/*
  19. // @include http://115.com/*
  20. // @include https://www.furk.net/*
  21. // @include https://www.seedr.cc/*
  22. // @grant GM_setValue
  23. // @grant GM_getValue
  24. // @supportURL http://www.hoothin.com
  25. // @license MIT License
  26. // @compatible chrome
  27. // @compatible firefox
  28. // @grant unsafeWindow
  29. // @contributionURL https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=rixixi@sina.com&item_name=Greasy+Fork+donation
  30. // @contributionAmount 1
  31. // ==/UserScript==
  32. (function() {
  33. 'use strict';
  34. var sites={
  35. 0:{
  36. name:"baidu",
  37. url:"http://pan.baidu.com/disk/home",
  38. bgColor:"ffffff",
  39. bgImg:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAABjFBMVEX////7+/v+/v/8/Pwyf/wzc/w0bvza5f4xffz5+//0+P8ybPz8/f4yevw0cPwza/z39/cwe/UxdfzSPyr4+v/2+f/m7/53nv0vf/wvce9pof1tlPwxf/gzfPYwePPp8f7Z5/7S4v7P4P7L3f7I2f2Gtf2Rr/1hkP0yd/1FiPwygfxAdPxspftYkvUtc/Dg6f7C2f7F1f54oP1flf0/hfwsbu7i7f/w9f7b5v7X5f7V4v6nyv6oxv6jwP6Ns/2Lsf1/rv1+ov1zof1xof10nf1jm/1djP0xe/2NufxalvxHj/xPhvxKgPxHffw+efw0ePyXu/mqxPg5hfiTtvdyo/dgmfdOj/dBhfVflfQvefT+9fOIqvMyefNMhvFIgO9MeePyycVjZbzKb3DaZVa/Q0Dx9f+Bp/1olv1gkPw0dvzg6Pu2zPk0gflNjPctc/c9gfX88/JJfO3n3+ni2unHxuSGktNpdtBJY8paashRW71nXqp7YpyDYJKpaIKPU33AVFXARkTVTTvFQjrUPypKwHq1AAACAklEQVQ4y4WTB3OqQBSFF3BpAk+KIBixJ2rs0fTee68vvbzee+9//O1Cio46npmFPfd8d2cY9gIASMJHUESDKFQmAZJAUKCFKELA/WSr3A3d/tZnAF99C8fVHYhiosbxxflsdr7I15SIWiCe3exA2szGmwOJXTkUkvHaTTQD9NyBLO/t7OzJ8kFObwKs2/bRdrSvL7p9ZNvrjQC/n8/nwngXzuXz+3wDED42zS13u2Wax+EGQD+pmhvudsOsnuj1gBAZSp5+/XRIYkMeVu1XyaGIcAfoycVM4Pn3qx9vcW3gRUcmE8gsJvUboNfyeDyBwLd/6sX7wtNnC45DD6vXBbRx1sOmrQ+/VFX9efomhFzFstLoNa45QKzCijMx/vXZpar+/fKSZecWijwfmxHZSgzFFBgWxXQUIJ39UX9/nhPFngHsomlRHEYxRY6mlCkOl+5fXp2vraV6IgCLm1JSoyQGxhRlUnCAi/PUEwXnWMKkooxhAIxAuNSPS+8+Qgi7GOB3zutfgnAExQSIr0JoMJw2GJSghPLSo4eDGscYEK7Gna/gy7QkLRvTK5JEP2bAgy4vvTJtLCNX5h0AMLNemvbihfqBv3zjZpHDACKM7ntI3RMFgFSYcJ3B3P0sf6kzGOxM+AFwXAK7kuNurz2pcWTt7deuna/t4LQdvbbD23b8/wPY0UTO99dD5gAAAABJRU5ErkJggg=="
  40. },
  41. 1:{
  42. name:"yyw",
  43. url:"http://115.com/?tab=offline&mode=wangpan",
  44. bgColor:"21458a",
  45. bgImg:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAASFBMVEUhRYr///+XqcjV3OmJnMFTb6QoS45PbKLu8fbZ4OvBy95xiLRifKxbdqlXcqYxU5P3+Prh5u/O1uXH0eK6xduks89/lLtGZJ4ysMfhAAAAVUlEQVQY04WPSQ6AMAwD6ySkdKHs8P+fckyDhPBtRoojhyG4GP6FEjPvxhGZiKKJPM7uoAHYSif0Lgdw+tppQfOGIF4ILsea3CetvMa+UaRq+Mh7/gPkxAHFh9WDUQAAAABJRU5ErkJggg=="
  46. },
  47. 2:{
  48. name:"furk",
  49. url:"https://www.furk.net/users/files/add",
  50. bgColor:"f1f1f1",
  51. hide:false,
  52. bgImg:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAuCAMAAABgZ9sFAAAAflBMVEX///+CuuaGv+rjXKniTaiDu+d3tufiXq/nUqxAn9+t1vGiz/FOnt/sj8nol8bhcLJRo97b7vp5uOpCoeGQw+m31/XW6/er0++Iwe330uZUpuHssNjni8Tqf7/o9Pn68PSUx+732eucyuvzzuJjq+H0v97sm8q12vDto8/rcrjt831UAAABmUlEQVRIx+2T6W6DMBCE8dr4aEgw0KS5kzZH2/d/we7aliJlN6KR+rNjgYwYfxrwuPrXXwkeaC7ba1nqU7YrWfV83N6rm95G7ZCWlNnL6Kfa20zBA7tNEl7KSsjl5In/rsBOnqArtfx1GGXVGH112Wwuq2KnMMDp2nnUtaquOsttchik15yeLGZ68tpp7403elXo4pZn5Ld3zpg03VWFjkOme51kcGj/nu1p7wF6QPU0cjKDVIyBRrfbtdptM4XYqYIoSKP+KHQ04X17wKfDF8JJYJUt9cqrVH2sUOg0hJ4Ju5rNRSWMIb9r70uA4a2lRRSrx9stDF6ne7tCrz12XbdfLPbdAicVCdFEr5gdQGq306Qt6wz5gR81+t2tmXI6SbLT5sx4ga1YMdNidM/sAMQXOmOoBVPxeMidaaUwFsSjbVBa+NS0RdyequgYXS0pjhSmlegWcKxfRbrmdFBwjpHbMblEV+cQwiDSnUBfD8PQNMDtVBpOH2IYhjVInZHosYkxBh7GGZEeGpRg161Ib0ITQhTCMPrz+gG1shF4koHETAAAAABJRU5ErkJggg=="
  53. },
  54. 3:{
  55. name:"seedr",
  56. url:"https://www.seedr.cc/files",
  57. bgColor:"ca2a15",
  58. hide:false,
  59. bgImg:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAllBMVEXGKBPGKBPGKBPGKBPORDLJMh3uv7nQTDvILRjprKPmoZjbdmnLOyjKNSHtvLbrtK3opp3lm5Hhj4Tac2XZb2HXalvUXEzLOibGKBPGKBPGKBPqsarjlovehHjXaFnTWkrMQC3GKBPGKBPGKBP////44+H77u323Nj01dHxycP88vH66+n23dr019Tyz8rxzMfvw73vwrxYVj9BAAAAJHRSTlP7yb+j+/v9+/v9/f37+/39/f39/f39+/uxmSj9/f37+/uXNR2Gd9E6AAAAmUlEQVQY003NVxKDMAxFUQVsbHqv6YkMIT3731wEZoD7oZl3fgQXY7PKaKACKn93BxirwaArWsQXH8EcYYeUu4BnDRAsUKgBWjZDeqfduXKGmHbPT3YiJ9giPtj+qUJWavghxoUSHFxLAz3JIgcAypsGBzF3bAJvAvHB5PiVnm8HGoBZIffTVvWMoIIhX4KIMg5whsbcrKqvf29uDBcu2+SAAAAAAElFTkSuQmCC"
  60. },
  61. };
  62. var enableUrl = 'a[href^="magnet"],[href^="ed2k://|file"],[href$=".torrent"],[href$=".mp4"],[href$=".rar"],[href$=".7z"],[href$=".zip"],[href$=".rmvb"],[href$=".mkv"],[href$=".avi"],[href$=".iso"]';
  63. var disableUrl=[".torrentkitty.","bt.box.n0808.com"];
  64. var lang = navigator.appName=="Netscape"?navigator.language:navigator.userLanguage;
  65. var i18n={};
  66. if(navigator.userAgent.indexOf('Firefox') == -1 && unsafeWindow && unsafeWindow.jQuery)$ = unsafeWindow.jQuery;
  67. switch (lang){
  68. case "zh-CN":
  69. i18n={
  70. yyw:"115网盘",
  71. baidu:"百度网盘",
  72. furk:"Furk网盘",
  73. seedr:"Seedr网盘"
  74. };
  75. break;
  76. default:
  77. i18n={
  78. yyw:"115",
  79. baidu:"BaiduPan",
  80. furk:"Furk",
  81. seedr:"Seedr"
  82. };
  83. break;
  84. }
  85.  
  86. function include(things,obj) {
  87. for (var i = things.length - 1; i >= 0; i--) {
  88. if ($(things[i]).attr('href')===$(obj).attr('href')){
  89. return true;
  90. }
  91. }
  92. }
  93.  
  94. function setCss(){
  95. $('head').append(`
  96. <style>
  97. a.whx-a{
  98. display:inline-block;
  99. margin-left:5px;
  100. background-size:20px;
  101. border-radius:50%;
  102. border:0px;
  103. vertical-align:middle;
  104. transition:margin-top 0.25s ease;
  105. outline:none!important;
  106. padding:0px!important;
  107. height:25px!important;
  108. width:25px!important;
  109. background-position:center!important;
  110. background-repeat:no-repeat!important;
  111. }
  112. </style>
  113. `);
  114. }
  115.  
  116. function getAllEnableUrl() {
  117. var rawnodes = $(enableUrl).get();
  118. var nodes = [];
  119. var i,x;
  120. var curNode;
  121. var parentDiv=$("<div style='display:none;position:relative;z-index:99999;overflow:visible;text-align:left;'></div>");
  122. var offUrl;
  123. var offNodes=[];
  124. function hideIcons(){
  125. parentDiv.css("display","none");
  126. for(var node of offNodes){
  127. node.css("margin-top","0px");
  128. }
  129. }
  130. for(x = 0; x < 4; x++){
  131. let offNode=$("<a></a>");
  132. offNode.addClass('whx-a').css("position","absolute").css("margin-top","0px").css("margin-left","0px");
  133. offNode.attr("target","_blank").click(function (event) {GM_setValue("url",getRightMagnetUrl(offUrl));});
  134. let siteConfig=sites[x];
  135. offNode.css("background-color","#"+siteConfig.bgColor).attr("title",i18n[siteConfig.name] ).attr("href", siteConfig.url);
  136. if(siteConfig.bgImg)offNode.css("background-image","url(\""+siteConfig.bgImg+"\")");
  137. /*switch(x){
  138. case 0:
  139. offNode.css("background-color","#e1e1e1").attr("title",i18n.baidu ).attr("href", "http://pan.baidu.com/disk/home");
  140. break;
  141. case 1:
  142. offNode.css("background-color","#F44336").attr("title",i18n.seedr ).attr("href", "https://www.seedr.cc/files");
  143. break;
  144. case 2:
  145. offNode.css("background-color","#3BEBFF").attr("title",i18n.furk ).attr("href", "https://www.furk.net/users/files/add");
  146. break;
  147. case 3:
  148. offNode.css("background-color","#5e5eff").attr("title",i18n.yyw ).attr("href", "http://115.com/?tab=offline&mode=wangpan");
  149. break;
  150. }*/
  151. offNodes.push(offNode);
  152. if(siteConfig.hide)continue;
  153. parentDiv.prepend(offNode);
  154. }
  155. parentDiv.mouseover(function(e){
  156. e.stopPropagation();
  157. });
  158. document.addEventListener("mouseover", function(e){
  159. hideIcons();
  160. });
  161.  
  162. if(rawnodes.length > 0){
  163. for (i = 0; i < rawnodes.length; i++) {
  164. var disable = false;
  165. curNode = rawnodes[i];
  166. if(!/magnet|ed2k:\/\//.test(curNode.href) && /[#\?]/.test(curNode.href))continue;
  167. for(var j = 0; j < disableUrl.length; j++){
  168. var temp = disableUrl[j];
  169. if(curNode.href.indexOf(temp)!=-1){
  170. disable = true;
  171. break;
  172. }
  173. }
  174. if(disable)continue;
  175. if(!include(nodes,curNode)){
  176. nodes.push(curNode);
  177. }
  178. }
  179. }
  180.  
  181. if(nodes.length > 0){
  182. $("body").append(parentDiv);
  183. var codeList = [];
  184. var listLen = 0;
  185. listLen = nodes.length;
  186. setCss();
  187. if (listLen !== 0) {
  188. for (i = 0; i < listLen; i++) {
  189. curNode = nodes[i];
  190. let clone=$("<a></a>").attr("style",curNode.getAttribute("style")).attr("href",curNode.getAttribute("href")).addClass('whx-a').css("background-color","#e1e1e1").css("background-image",'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAMAAADzN3VRAAAARVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADc6ur3AAAAFnRSTlMAYM5vMOA/ENGegK2olI6G1b97Z0sXENA+jAAAAKFJREFUKM+FklkSxCAIRHFfss3K/Y86iQSDVqzpH7FfgQpCVfAmGx+gl9JI0qrxrcNLzooEbKUG4EKWdkCiDRV0N0RTrZ5wvdgTTgp4SzCAHxAPZkAM5GOJWuuT7FE5OVPOBFLTYb3Oc2YB5uJ8+G6pgkTGt74ntcCJHiwFLHw10Tdc93jlGXGvSRtsHNpuPs+/o1ODfxAtSL0f7HPC+L/9AF60G3QxO1UaAAAAAElFTkSuQmCC")');
  191. clone.mouseover(function(e){
  192. offUrl=clone.attr("href");
  193. parentDiv.css("display","block");
  194. var basePos=clone.offset();
  195. parentDiv.offset({top:basePos.top,left:basePos.left});
  196. for(var x=0;x<4;x++){
  197. offNodes[x].css("margin-top",-x*25+"px");
  198. }
  199. e.stopPropagation();
  200. });
  201. $(curNode).after(clone);
  202. }
  203. }
  204. }
  205. }
  206.  
  207. function getRightMagnetUrl(url){
  208. var newUrl = url;
  209. if(/^magnet/.test(url)){
  210. newUrl=newUrl.split("&")[0].substring(20);
  211. if(newUrl.length==32){
  212. newUrl="magnet:?xt=urn:btih:" + base32ToHex(newUrl);
  213. }else{
  214. newUrl=url;
  215. }
  216. }
  217. return newUrl;
  218. }
  219.  
  220. var b32 = {'a':'00000','b':'00001','c':'00010','d':'00011','e':'00100','f':'00101','g':'00110','h':'00111','i':'01000','j':'01001','k':'01010','l':'01011','m':'01100','n':'01101','o':'01110','p':'01111','q':'10000','r':'10001','s':'10010','t':'10011','u':'10100','v':'10101','w':'10110','x':'10111','y':'11000','z':'11001','2':'11010','3':'11011','4':'11100','5':'11101','6':'11110','7':'11111'};
  221. var b16 = {'0000':'0','0001':'1','0010':'2','0011':'3','0100':'4','0101':'5','0110':'6','0111':'7','1000':'8','1001':'9','1010':'a','1011':'b','1100':'c','1101':'d','1110':'e','1111':'f'};
  222. function base32ToHex(str){
  223. if(str.length % 8 !== 0){
  224. return null;
  225. }
  226. str = str.toLowerCase();
  227. var bin = "", returnStr = "", i;
  228. for(i = 0;i < str.length;i++){
  229. bin += b32[str.substring(i,i+1)];
  230. }
  231. for(i = 0;i < bin.length;i+=4){
  232. returnStr += b16[bin.substring(i,i+4)];
  233. }
  234. return returnStr;
  235. }
  236.  
  237. var i=0;
  238. var t=window.setInterval(function() {
  239. var curlink;
  240. if (location.href.indexOf("furk.net/users/files/add") != -1){
  241. window.clearInterval(t);
  242. curlink = GM_getValue('url');
  243. if(curlink){
  244. setTimeout(function() {
  245. $('#url').val(curlink);
  246. GM_setValue('url', '');
  247. $(":submit[value='Add download']").click();
  248. }, 500);
  249. }
  250. }else if(location.href.indexOf("seedr.cc/files") != -1){
  251. if($('#upload-button').css("display") != "none"){
  252. window.clearInterval(t);
  253. curlink = GM_getValue('url');
  254. if(curlink){
  255. setTimeout(function() {
  256. $(':text[name="torrent"]').val(curlink);
  257. GM_setValue('url', '');
  258. $('#upload-button').click();
  259. }, 500);
  260. }
  261. }
  262. }else if(location.href.indexOf("pan.baidu.com/disk/home") != -1){
  263. window.clearInterval(t);
  264. curlink = GM_getValue('url');
  265. if(curlink){
  266. document.querySelector('.g-button[data-button-id=b13]').click();
  267. var bsi = setInterval(function() {
  268. var newTaskBtn = document.querySelector('#_disk_id_2');
  269. if(newTaskBtn){
  270. clearInterval(bsi);
  271. newTaskBtn.click();
  272. var bsl = setInterval(function() {
  273. var offLink=document.querySelector('#share-offline-link');
  274. if(offLink){
  275. clearInterval(bsl);
  276. offLink.value = curlink;
  277. document.querySelectorAll('#newoffline-dialog>.dialog-footer>.g-button')[1].click();
  278. if(/^magnet|torrent$/.test(curlink))
  279. var i=0, bsb = setInterval(function(){
  280. var btList=document.querySelector('#offlinebtlist-dialog');
  281. if(++i>50 || (btList && btList.style.display!="none")){
  282. clearInterval(bsb);
  283. btList.querySelectorAll('.dialog-footer>.g-button')[1].click();
  284. }
  285. }, 200);
  286. }
  287. }, 500);
  288. }
  289. }, 500);
  290. GM_setValue('url', '');
  291. }
  292. }else if(location.href.indexOf("115.com/?tab=offline&mode=wangpan") != -1){
  293. window.clearInterval(t);
  294. curlink = GM_getValue('url');
  295. if(curlink){
  296. var rsc = setInterval(function() {
  297. if (document.readyState == 'complete') {
  298. clearInterval(rsc);
  299. setTimeout(function() {
  300. Core['OFFL5Plug'].OpenLink();
  301. setTimeout(function() {
  302. $('#js_offline_new_add').val(curlink);
  303. }, 300);
  304. }, 1000);
  305. }
  306. }, 400);
  307. GM_setValue('url', '');
  308. }
  309. }else if(i > 6 || ((i++) === 0 && $(enableUrl).length > 0)){
  310. window.clearInterval(t);
  311. getAllEnableUrl();
  312. }
  313. }, 500);
  314. })();