// ==UserScript== // @name 隐心百度云盘钥匙 // @namespace http://tampermonkey.net/ // @version 1.5 // @description 百度云盘钥匙,主要功能有:1、打开百度云盘链接地址时,会自动获取提取码填入,并会自动提交,一键打开分享链接,方便快捷;2、浏览任何网页时,只要包含百度云盘分享链接,都会在页面左上角显示链接是否有效,如果有效则会显示提取码。 // @author Yisin // @match *://pan.baidu.com/* // @match *://*/* // @require https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js // @grant GM_xmlhttpRequest // @grant GM_openInTab // @connect meek.com.cn // @connect ip.cn // @downloadURL none // ==/UserScript== (function() { 'use strict'; var isBDY = false; var URL_STORE = {}; function getLocationKey(){ var key = ""; var url = document.location.href; if(url.indexOf('//pan.baidu.com/s/') != -1){ key = document.location.pathname.substring(4); } else if(url.indexOf('//pan.baidu.com/share/init') != -1){ key = getUrlParam(null, "surl"); } if(/^1[^\s]+/g.test(key)){ key = key.substring(1); } return key; } function getUrlKey(url){ var key = ""; if(url.indexOf('//pan.baidu.com/s/') != -1){ key = url.substring(url.indexOf('//pan.baidu.com/s/') + 18); } else if(url.indexOf('//pan.baidu.com/share/init') != -1){ key = getUrlParam(url, "surl"); } if(/^1[^\s]+/g.test(key)){ key = key.substring(1); } return key; } function getUrlParam(u, param) { var url = u || location.href; var reg = new RegExp("(" + param + ")=([^&#]*)", "g"), matched = url.match(reg); return matched && matched[0] ? matched[0].replace(param + "=", "") : null; } function LoadPass(bdyKey, callback){ var bdyUrl = 'https://pan.baidu.com/s/' + bdyKey; var bdyPass = ""; if(window.localStorage){ bdyPass = localStorage.getItem(bdyUrl); } if(bdyPass && bdyPass.length == 4){ console.info(bdyUrl,"->",bdyPass); if(callback){ callback(bdyPass); } if(isBDY){ $('.verify-input input').val(bdyPass); $('.g-button.g-button-blue-large').click(); } } else { var weburl = 'http://ypsuperkey.meek.com.cn/api/items/BDY-' + bdyKey + '?access_key=4fxNbkKKJX2pAm3b8AEu2zT5d2MbqGbD&client_version=web-client&' + new Date().getTime(); GM_xmlhttpRequest({ method: 'GET', url: weburl, headers: {"Accept": "application/json"}, contentType: "application/json", dataType: 'json', onload: function(response){ if(response.statusText == 'OK'){ try{ var res = JSON.parse(response.responseText); bdyPass = res.access_code; console.info(bdyUrl,"->",bdyPass); if(bdyPass && bdyPass.length == 4){ if(window.localStorage){ localStorage.setItem(bdyUrl, bdyPass); } if(isBDY){ $('.verify-input input').val(bdyPass); $('.g-button.g-button-blue-large').click(); return; } } if(callback){ callback(bdyPass); } else { autoGet(bdyUrl); } }catch(e){} } else if(callback){ callback(bdyPass); } else { autoGet(bdyUrl); } } }); } } function CheckUrl(weburl, callback){ GM_xmlhttpRequest({ method: 'GET', url: weburl, contentType: "text/html", onload: function(response){ if(response.statusText == 'OK' && response.responseText){ if(/百度网盘-链接不存在<\/title>/g.test(response.responseText) || />啊哦,邀请链接已失效/g.test(response.responseText)){ callback(false); } else { callback(true); } } else { callback(false); } } }); } function ShowBDYPass(url, pass){ if(URL_STORE[url]){ return; } pass = pass || ""; URL_STORE[url] = pass; var $div = $('#__BDY-DIV-BOX'); var $list = {}; var $box = {}; var $btn = {}; if(!$div.length){ $div = $('<div id="__BDY-DIV-BOX"><div class="____list"></div><div class="____btnbox"><div class="____btn" style="width:22px;height:22px;line-height:20px;text-align:center;border:1px solid #dddddd;background:#ffffff;cursor:pointer;" title="关闭窗口">X</div></div></div>'); $('html').append($div); $list = $div.find('.____list'); $box = $div.find('.____btnbox'); $btn = $div.find('.____btnbox .____btn'); $div.css({ "position": "fixed", "width": "510px", "height": "23px", "overflow": "hidden", "font-size": "13px", "top": 0, "left": '-490px', "border": "2px solid #5555ff", "background": "#f0f0f0", "color": "#5555ff", "z-index": 9999999, "opacity": '0.5' }); $list.css({ "width": "450px", "height": "auto", "padding": "10px", "float": 'left' }); $box.css({ "width": "23px", "height": "auto", "padding": "0", "float": 'right' }); $div.hover(function(){ $div.css({ 'left': 0, "height": "100px", "overflow": "auto", "opacity": '1' }); $box.css({ "float": 'left', "margin-top": "2px" }); }, function(){ $div.css({ 'left': "-490px", "height": "23px", "overflow": "hidden", "opacity": '0.5' }); $box.css({ "float": 'right', "margin-top": 0 }); }); $btn.hover(function(){ $btn.css({ "background": '#eeeeee', "border": '1px solid #ddcccc', "color": "#ff0000" }); }, function(){ $btn.css({ "background": '#ffffff', "border": '1px solid #dddddd', "color": "#000000" }); }); $btn.on('click', function(){ $div.hide(); }); } else { $list = $div.find('.____list'); $box = $div.find('.____btnbox'); $btn = $div.find('.____btnbox button'); } var color = '#000000'; if(pass == '链接已失效'){ pass = ',' + pass; color = '#ff0000'; } else if(pass){ pass = ',提取码:' + pass; color = '#55aa55'; } $list.append('<div style="line-height:18px;"><a href="'+url+'" target="_blank" style="color:'+color+'">' + url + '</a>' + pass + '</div>'); autoGet(url); } function autoGet(url){ if(isBDY){ $('.verify-input input').on('blur', function(){ var code = $(this).val(); if(code && code.length == 4){ if(window.localStorage){ localStorage.setItem(url, code); } } }); } } function BaiduPan(url){ this.url = url; this.code = ''; this.CK_DATA = {}; } BaiduPan.prototype = { load: function(){ var that = this; var bdyKey = getUrlKey(that.url); if(bdyKey){ var res = that.CK_DATA[that.url]; if(res){ if(res.suc){ LoadPass(bdyKey, function(pass){ ShowBDYPass(that.url, pass); }); } else { ShowBDYPass(that.url, "链接已失效"); } } else { CheckUrl(that.url, function(suc){ if(suc){ that.CK_DATA[that.url] = {"suc": true}; LoadPass(bdyKey, function(pass){ ShowBDYPass(that.url, pass); }); } else { that.CK_DATA[that.url] = {"suc": false}; ShowBDYPass(that.url, "链接已失效"); } }); } } } }; if(/^(http|https):\/\/pan.baidu.com\//g.test(document.location.href)){ isBDY = true; var bdyKey = getLocationKey(); if(bdyKey){ LoadPass(bdyKey); } } else { var html = $('body').html(); if(html){ var arrs = html.match(/(http|https):\/\/pan.baidu.com\/s\/[a-zA-Z0-9_-]+/g); if(arrs && arrs.length){ var index = 0; for(var i = 0; i < arrs.length; i++){ new BaiduPan(arrs[i]).load(); } } } } })();