Greasy Fork is available in English.

Baidu Pan SuperKey

度盘万能钥匙,云盘万能钥匙扩展改成 GM 脚本

// ==UserScript==
// @name		Baidu Pan SuperKey
// @namespace	[email protected]
// @author		jasake
// @description	度盘万能钥匙,云盘万能钥匙扩展改成 GM 脚本
// @description	有需要的请使用原版扩展:https://addons.mozilla.org/zh-CN/firefox/addon/ypsuperkey/
// @include		https://pan.baidu.com/share/init?surl=*
// @include		https://pan.baidu.com/wap/init?surl=*
// @include		https://pan.baidu.com/share/init?shareid=*
// @include		https://pan.baidu.com/wap/init?shareid=*
// @include		https://pan.baidu.com/s/*
// @charset		UTF-8
// @version		0.5.2
// @grant		GM_xmlhttpRequest
// @run-at		document-end
// ==/UserScript==

function shareHistory(id, pw) {//本地历史记录,有效期30天
	if (!/(?:\w|-){5,}/.test(id)) return;
	var log = JSON.parse(localStorage.getItem("shareHistory") || '{}'), Keys = Object.keys(log).filter(x => x != '_lastCheck'), last = log['_lastCheck'], t = Math.round(new Date().getTime() / 1e3), exp = t + 30 * 86400;
	if (!last) {
		Keys.forEach(x => {
			if (log[x].split('|').length == 1) log[x] += '|' + exp;
		});
		log['_lastCheck'] = t;
		localStorage.setItem("shareHistory", JSON.stringify(log));
	} else if (last && t - last > 3600) {
		Keys.forEach(x => {
			var arr = log[x].split('|');
			if (+arr[1] < t) log[x] = undefined;
		});
		log['_lastCheck'] = t;
		localStorage.setItem("shareHistory", JSON.stringify(log));
	}
	if (pw == undefined) {
		return log[id] && log[id].split('|').shift() || '';
	} else if (/^[a-zA-Z0-9]{4}$/.test(pw)) {
		log[id] = pw + '|' + exp;
		localStorage.setItem("shareHistory", JSON.stringify(log));
	}
}

var hash = location.hash && /^#([a-zA-Z0-9]{4})$/.test(location.hash) && RegExp.$1,
	$ = unsafeWindow.require('system-core:context/context.js').instanceForSystem.libs.JQuery,
	input = document.querySelector('.pickpw input[tabindex="1"], .access-box input#accessCode'),
	btn = document.querySelector('.pickpw a.g-button, .access-box a#getfileBtn'),
	label = document.querySelector('.pickpw dt, .access-box label[for=accessCode]'),
	shareID = (location.href.match(/\/init\?(?:surl|shareid)=((?:\w|-)+)/) || location.href.match(/\/s\/1((?:\w|-)+)/))[1],
	history = shareHistory(shareID);

if (location.href.indexOf('baidu.com/s/') > 0) {//v5
	var url = location.href.replace('baidu.com', 'baiduwp.com').match(/^([^#]+)/)[1] + (location.href.indexOf('?') == -1 ? '?' : '&') + 'pwd=' + history;
	$('<a class="g-button" href="' + url + '" title="转到 Pandownload 网页版"><span class="g-button-right"><em class="icon icon-picpre-download" style="color:#d60;"><font color="#090"></em><span class="text" style="width: auto;"><font color="#090">Pandownload 网页版</font></span></span></a>').insertBefore('.x-button-box a.g-button[data-button-id=b3]');
}

if (!input || !btn) return;
//if (location.hash && /^#([a-zA-Z0-9]{4})$/.test(location.hash)) return;//v2

label.style.margin="-5px 0 10px";
label.innerHTML += '<br>度盘万能钥匙:';

if (hash || history) {//v4,一秒后
	label.innerHTML += '发现提取码('.fontcolor('green') + (hash || history).fontcolor('red') + '),稍后填写并点击'.fontcolor('green');
	setTimeout(function() {
		input.value = hash || history;
		if (hash) shareHistory(shareID, hash);//保存
		btn.click();
	},
	1e3);
	return;
}

var url ='https://ypsuperkey.meek.com.cn/api/items/BDY-'
		+ shareID + '?access_key=4fxNbkKKJX2pAm3b8AEu2zT5d2MbqGbD&client_version=2018.8';

GM_xmlhttpRequest({
	method: 'GET',
	url: url,
	onload: function(xhr) {
		var e = JSON.parse(xhr.responseText);
		console.log(xhr.responseText);
		label.innerHTML += xhr.status == 200 ? ('连接成功,'.fontcolor('blue') + (e.access_code ? '密码已获取'.fontcolor('blue') : '但密码找不到'.fontcolor('red'))) : (e.message + ',服务器状态:' + xhr.statusText + '(' + xhr.status + ')').fontcolor('red');//状态提示
		if (xhr.status == 200 && e.access_code) {
			input.value = e.access_code;//填写密码
			shareHistory(shareID, e.access_code);
			setTimeout(function(){btn.click();}, 1e3);//一秒后自动点击
		}
	}
});