Enhancements for Baidu™ WebDisk.
< Feedback on Baidu™ WebDisk Helper (dupan-helper)
如果是为了提取文件,可以试试这个
这是我根据原作者的代码提取出来的脚本,只实现肚娘提取码的功能。
代码不依赖百度的库,所以只要API不变理论上不受更新影响。
浏览器登录百度云盘后,F12控制台[Console]粘贴代码,回车。
依次粘贴提取码和输入存放路径后等待运行即可,进度会显示在控制台里。
//提取码 var code = prompt("请输入提取码[游侠肚娘]"); //保存目录(保存在网盘的目录 例:/test123/) var dir = prompt("请输入存放目录[格式示例:/GTA5/](杠开头杠结尾)"); /** * 一个简单的类似于 NodeJS Buffer 的实现. * 用于解析游侠度娘提取码。 * @param {SimpleBuffer} */ function SimpleBuffer(str) { this.fromString(str); } SimpleBuffer.toStdHex = function toStdHex(n) { return ('0' + n.toString(16)).slice(-2); }; SimpleBuffer.prototype.fromString = function fromString(str) { var len = str.length; this.buf = new Uint8Array(len); for (var i = 0; i < len; i++) { this.buf[i] = str.charCodeAt(i); } }; SimpleBuffer.prototype.readUnicode = function readUnicode(index, size) { if (size & 1) size++; var bufText = Array.prototype.slice.call(this.buf, index, index + size).map(SimpleBuffer.toStdHex); var buf = ['']; for (var i = 0; i < size; i += 2) buf.push(bufText[i + 1] + bufText[i]); return JSON.parse('"' + buf.join('\\u') + '"'); }; SimpleBuffer.prototype.readNumber = function readNumber(index, size) { var ret = 0; for (var i = index + size; i > index;) ret = this.buf[--i] + (ret * 256); return ret; }; SimpleBuffer.prototype.readUInt = function readUInt(index) { return this.readNumber(index, 4); }; SimpleBuffer.prototype.readULong = function readULong(index) { return this.readNumber(index, 8); }; SimpleBuffer.prototype.readHex = function readHex(index, size) { return Array.prototype.slice.call(this.buf, index, index + size).map(SimpleBuffer.toStdHex).join(''); }; function DuParser() {} DuParser.parse = function generalDuCodeParse(szUrl) { var r; if (szUrl.indexOf('BDLINK') === 0) { r = DuParser.parseDu_v1(szUrl); r.ver = '游侠 v1'; } else { r = DuParser.parseDu_v2(szUrl); r.ver = '梦姬标准'; } return r; }; DuParser.parseDu_v1 = function parseDu_v1(szUrl) { var raw = atob(szUrl.slice(6).replace(/\s/g, '')); if (raw.slice(0, 5) !== 'BDFS\x00') return null; var buf = new SimpleBuffer(raw); var ptr = 9; var arrFiles = []; var fileInfo, nameSize; var total = buf.readUInt(5); for (i = 0; i < total; i++) { // 大小 (8 bytes) // MD5 + MD5S (0x20) // nameSize (4 bytes) // Name (unicode) fileInfo = {}; fileInfo.size = buf.readULong(ptr + 0); fileInfo.md5 = buf.readHex(ptr + 8, 0x10); fileInfo.md5s = buf.readHex(ptr + 0x18, 0x10); nameSize = buf.readUInt(ptr + 0x28) << 1; fileInfo.nameSize = nameSize; ptr += 0x2C; fileInfo.name = buf.readUnicode(ptr, nameSize); arrFiles.push(fileInfo); ptr += nameSize; } return arrFiles; }; DuParser.parseDu_v2 = function parseDu_v2(szUrl) { return szUrl.split('\n').map(function(z) { // unsigned long long: 0~18446744073709551615 return z.trim().match(/([\dA-F]{32})#([\dA-F]{32})#([\d]{1,20})#([\s\S]+)/); }).filter(function(z) { return z; }).map(function(info) { return { md5: info[1], md5s: info[2], size: info[3], name: info[4] }; }); }; var codeInfo = DuParser.parse(code); var failed = 0; saveFile(0); function saveFile(i) { if (i >= codeInfo.length) { console.log(`转存完毕 (失败 ${failed} 个)!`); return; } console.log(`正在转存文件 (${ i + 1 }/${ codeInfo.length }), 请稍后 ..`); var file = codeInfo[i]; $.ajax({ url: '/api/rapidupload', type: 'POST', data: { path: dir + file.name, 'content-md5': file.md5, 'slice-md5': file.md5s, 'content-length': file.size } }).success(function(r) { if (r.errno) failed++; }).fail(function(r) { failed++; }).always(function() { saveFile(i + 1); }); }
Sign in to post a reply.
如果是为了提取文件,可以试试这个
这是我根据原作者的代码提取出来的脚本,只实现肚娘提取码的功能。
代码不依赖百度的库,所以只要API不变理论上不受更新影响。
浏览器登录百度云盘后,F12控制台[Console]粘贴代码,回车。
依次粘贴提取码和输入存放路径后等待运行即可,进度会显示在控制台里。