一键导出百度网盘群文件

您所在的位置:网站首页 百度网盘群文件分享出去 一键导出百度网盘群文件

一键导出百度网盘群文件

2024-07-06 03:36| 来源: 网络整理| 查看: 265

你有没有遇到过朋友给你分享资源的场景,一般人都有过,绝大部分场景下,我们直接转存就好了,但是也有少数情况下我们发现处于诸多限制,比如自己网盘容量太低或者是别人分享的内容太多,导致我们没有办法一次保存下来所有的分享文件。这个时候我们就需要取其精华去其糟粕,然后你就需要把目录导出来供自己选择,再根据目录索引到自己需要的资源然后保存到自己的网盘。

需求

我们来理一下,这里有两个需求:

能够批量导出整个分享的目录结构,最好是能知道这个目录下有多少个文件,总共有多大,以便于我们能计算出每一次保存到网盘的文件是哪些。能够按照自己的需求导出指定目录结构,因为当目录达到一定程度下的时候,全部导出来干扰资源的搜寻; 对策

我们先想想有哪些方案可以实现,在此之前自然是百度一下,看看别人是怎么做的。 在这里插入图片描述 总结了一下,得出了5种方案:

买软件,有个叫网盘批量处理助手的东西。我通过搜索找到了他的下载链接,然后弄了一个小号使用了一下,发现效果很差。然后我才发现,这个是个付费功能,要花199元(虽然觉得应该支持开发者,但是我真觉得有点贵了)。百度网盘有个缓存功能,他会把目录结构缓存到本地,但是前提是你要点开过这个目录,嗯,这个貌似很费事,不予采纳;自己写钩子脚本,在使用网页打开分享链接的时候,把我们的脚本挂上去自动查询处理并导出目录结构;完全实现http请求,模拟整个浏览器的操作,根据请求头,返回等查询到目录数据在导出;通过接入百度网盘Api的方式,调用接口实现; 实践

方案有了,接下来就是取舍。首先,我不想花钱买软件,一方面是担心信息泄密,另外一方面是我技术牛逼(穷);那么就只有4,5最合适,但是我想了想,如果我写好了想给朋友用,别人还要去申请api那不是很麻烦,于是最终方案敲定为通过油猴脚本实现。

既然是用油猴,免不了上油猴的脚本商店找找是不是已经有实现了的脚本,这样的话我改吧改吧就能对接上我自己的需求了。于是我打开了脚本商店greasyfork,然后使用关键词

“网盘导出分享目录”

搜索后,真的有人写过,感谢互联网,感谢作者。于是我安装了该脚本。安装,真的能愉快的跑起来。只不过只能导出整个目录,在子目录中选择导出,会提示我需要在主目录下获取,如果目录结构很大,就会很卡。所以我决定改造源码。

巧的是,我通过下载github上的源码发现人家也已经实现了这个功能。但是github上的源码就是跑不起来。然后我发现这个源码确实有点问题,因为有人提了BUG: 在这里插入图片描述

通过一些排查,我发现只要修改一个地方就能运行。

else if(g_type == 2){ dir_url ="https://pan.baidu.com/mbox/msg/shareinfo?msg_id=" + dir_info[i].msg_id + "&page=" + n_page + "&from_uk=" + dir_info[i].from_uk + "&gid=" + g_gid +"&type=2&num=100" +"&bdstoken=你的bdstoken&channel=chunlei&web=1&app_id=你的appid&logid=你的logid=&clienttype=0"; if(dir_info[i].fs_id){ dir_url+="&fs_id="+dir_info[i].fs_id; } }

上面这三个参数,你可以通过f12的开发者模式再点击的时候抓包看到,填进去替换就能愉快的使用这个功能了。

效果

最终我们来看下效果:

在这里插入图片描述 nice,结果导出到了txt:

在这里插入图片描述 好了,就到这里了,有问题欢迎留言;

有人希望我发一下脚本,那我发一下把,抛砖引玉:

// ==UserScript== // @name 百度网盘共享文件库目录清单导出 // @version 0.5 // @description try to take over the world! // @author Avens // @match https://pan.baidu.com/mbox* // @grant none // @require https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.3/FileSaver.min.js // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.1.1/jquery.min.js // @note 2020.10.26-V0.5 增加取子目录的功能 // ==/UserScript== // // 主目录类型 type1 // 主目录类型 type2 // 子目录 (function() { 'use strict'; // Your code here... var classMap = { 'title': 'sharelist-view-toggle', }; var g_type=0; var g_gid; var g_msgid; var g_frm; var g_to_uk; //获取主目录信息 function getGID(){ //遍历当前显示的目录及文件信息 //step1 取得gid 一个分享文件库的主ID 有两种type,一种使用form_uk 加gid查询 这是type2; 一种使用 form_uk 加 to_uk查询,这是type1 let lst = Array.from(document.getElementsByTagName('li')).filter(item => item.getAttribute('node-type') === 'sharelist-item'); const obj = lst.filter(item => item.getAttribute('class') === 'on'); var obj_length = obj.length; g_msgid = null; if(obj_length != 1) { alert("请在文件库根目录下,仅选中一个目录后执行!" ); return; } //判断是否目录 //- let lt = Array.from(obj[0].children).filter(item => item.getAttribute('class') === 'sharelist-item-size global-ellipsis'); if(lt.length == 1) { if(lt[0].textContent == '-') { g_msgid = obj[0].getAttribute('data-id'); g_gid = obj[0].getAttribute("data-gid"); g_frm = obj[0].getAttribute("data-frm"); g_to_uk = obj[0].getAttribute('data-to'); if (g_to_uk === null) { g_type = 2; } else { g_type = 1; } } } else { alert("请在文件库根目录下,仅选中一个目录后执行!" ); return; } // alert("g_gid=" + g_gid + " msg_id=" + g_msgid+ " frm="+g_frm+ " to="+g_to_uk); if( g_msgid === null) { alert("请在文件库根目录下,选中一个目录后执行!" ); return; } else { alert("取得主目录信息成功,可以单独导出该目录下的子目录信息!" ); } } function exportSubDir(){ let lst = Array.from(document.getElementsByTagName('li')).filter(item => item.getAttribute('node-type') === 'sharelist-item'); const obj = lst.filter(item => item.getAttribute('class') === 'on'); var obj_length = obj.length; var selected_arr = []; var dirinfo = []; //一级列表数组 if( g_msgid === null) { alert("请在文件库根目录下执行“获取ID”!" ); return; } for(var i = 0 ; i item.getAttribute('node-type') === 'sharelist-item'); const obj = lst.filter(item => item.getAttribute('class') === 'on'); var obj_length = obj.length; var selected_arr = []; var dirinfo = []; //一级列表数组 g_msgid = null; for(var i = 0 ; i item.getAttribute('class') === 'sharelist-item-size global-ellipsis'); if(lt.length == 1) { if(lt[0].textContent == '-') //文件夹 { var _msgid = obj[i].getAttribute('data-id'); g_msgid = _msgid; g_gid = obj[i].getAttribute("data-gid"); var _frm = obj[i].getAttribute("data-frm"); var _to_uk = obj[i].getAttribute('data-to'); var _fs_id = obj[i].getAttribute('data-fid'); if (_to_uk === null) { g_type = 2; } else { g_type = 1; } var _name = $(obj[i]).find('span[class="global-ellipsis sharelist-item-title-name"]').find('a').html(); var _size = 1; var _isDir = 1; var dinfo = createFileInfo(_name, _isDir, _size, _fs_id, _msgid, _frm, _to_uk); dirinfo.push(dinfo); } } } if( g_msgid === null) { alert("请在文件库根目录下执行!" ); return; } //Step3 遍历目录 queryDir(dirinfo); var output=""; for(var n = 0 ; n 2 ) //多试几次 { break; } } if(g_type == 1) { //https://pan.baidu.com/mbox/msg/shareinfo?msg_id=2503597858817404855&page=1&from_uk=2181389256&to_uk=1817073614&type=1&fs_id=929228779091096&num=50 dir_url ="https://pan.baidu.com/mbox/msg/shareinfo?msg_id=" + dir_info[i].msg_id + "&page=" + n_page + "&from_uk=" + dir_info[i].from_uk + "&to_uk=" + dir_info[i].to_uk +"&type=1&fs_id="+ dir_info[i].fs_id +"&num=100"; } else if(g_type == 2) { dir_url ="https://pan.baidu.com/mbox/msg/shareinfo?msg_id=" + dir_info[i].msg_id + "&page=" + n_page + "&from_uk=" + dir_info[i].from_uk + "&gid=" + g_gid +"&type=2&fs_id="+ dir_info[i].fs_id +"&num=100"; } console.log(dir_url); $.ajax({ type:'GET', url:dir_url, data:{}, dataType: "json", async: false, success:function(res){ var info="" ; if(res.errno != 0) { console.warn("errno:" + res.errno + "url: " + dir_url); is_failed_p ++; return; } is_failed_p =0; //成功重置 var file_lst = res.records; var len = file_lst.length; b_more = res.has_more; for(var n = 0 ; n 0) dinfo.path = file_lst[n].path.substring(0,lastn+1); else dinfo.path = file_lst[n].path; fileinfo.push(dinfo); info = info + "\n" + dinfo.getInfo(); if(_isDir == 1) { dir_info[i].num_subdir += 1; b_has_dir =1; } else { dir_info[i].num_subfile += 1; } } n_page++; // alert( info ); }, error:function(err){ console.error(err); is_failed_p ++; } }); } dir_info[i].sub_file_objs = fileinfo; if(b_has_dir == 1) queryDir(fileinfo); //有目录 递归调用 } } // 目录或文件对象 function createFileInfo(name,isDir,size, fs_id, msg_id, frm, to) { var ofile = new Object; ofile.name = name; //文件(夹)名称 ofile.isDir = isDir; //是否文件夹 ofile.size = size; //文件大小 ofile.fs_id= fs_id; ofile.msg_id= msg_id; ofile.from_uk=frm; ofile.to_uk=to; ofile.num_subfile = 0; //子文件数量 ofile.num_subdir = 0; //子目录数量 ofile.num_allfile = 0; //递归子目录数量 ofile.num_alldir = 0; //递归子文件数量 ofile.sub_file_objs=[]; //子文件对象 ofile.path=""; ofile.getSize = function( s) //返回尺寸 { if(s 1024 && s 1048576 && s


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3