Node.js也很适合编写自动化脚本。Node.js的在编写自动化脚本这方面生态不比Python差多少。并且据说相同的代码,Node.js的执行效率要高于Python。Node.js和Python的运行库体积也相差无几。MEGA在PIP和NPM都有现成的封装好的MEGA网盘API。但是经过实测发现Node.js的API相对来说更好使一些。我們把写好的代码放到ReplIt上运行就可以直接下载打包好的ZIP文件了。

我們把生成和运行JS的过程都集中到一个Bash里面,这样方便调用Linux的命令。Node.js调用系统命令比Python要复杂不少,并且有些命令并不能达到想要的效果,例如clear命令。

首先需要从NPM下载安装两个依赖,megajs即为Node.js的MEGA网盘API,compress用来将下载好的文件打成ZIP包。

然后使用cat命令生成这个JS文件,然后使用node命令执行它。

注意在ReplIt上执行完成之后,如果想要下载得到打包好的ZIP文件,要先把打包好的ZIP文件随便重命名一下,从shell里面运行生成、删除、重命名的文件变化虽然会反映到左侧的文件列表中,但是执行文件列表菜单中的“Download as ZIP”之后下载得到的文件是没有这个变化的。

同理,要删除文件的时候,也不宜在脚本中直接删除之前生成的ZIP文件,应该从文件列表中鼠标移到要删除的文件,然后点击右侧三个点的按钮,在菜单中选择Delete来删除。 否则以后下载整个ZIP文件时会发现之前从脚本删除的文件仍然还在。这种情况需要从文件列表中创建这个文件名的文件然后从文件列表中删除之才能去掉。

这已经是在ReplIt上提出了数个月的BUG了。

npm install megajs compressing
rm -f run.js || true
# rm -f pixiv*.zip || true
rm -rf pixiv || true
mkdir pixiv
cat>>run.js<<-EOF
const readline = require('readline');
const mega = require("megajs");
const fs = require("fs");
const compressing = require("compressing");
var y, z = 0;
var email = "", password = "";
var folderToDownload = "Pixiv"; // 改成你需要下载的目录名称。暂时只支持根目录下的一级目录console.log("+-----------------------------------------------------------+");
console.log("|                                                           |");
console.log("|   Download Specific Folder From Mega And Pack Up to Zip   |");
console.log("|                                                           |");
console.log("+-----------------------------------------------------------+");console.log("ATTENTION: Password will be shown - Do not let any others see");Date.prototype.format = function (fmt) { //type : 类型 0:时间为秒  1:时间为毫秒var date = this;var o = {"M+": date.getMonth() + 1, //月份"d+": date.getDate(), //日"h+": date.getHours(), //小时"m+": date.getMinutes(), //分"s+": date.getSeconds(), //秒"q+": Math.floor((date.getMonth() + 3) / 3), //季度"S": date.getMilliseconds() //毫秒};if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.\$1, (date.getFullYear() + "").substr(4 - RegExp.\$1.length));for (var k in o)if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.\$1, (RegExp.\$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));return fmt;
}console.log("Input email: "); // 运行到这里的时候输入邮箱
var rl = readline.createInterface({input: process.stdin,output: process.stdout
});new Promise((resolve, reject) => { rl.on('line', function(line){email = line;rl.close();resolve();});
}).then(() => {console.log("Input password: ");// 运行到这里的时候输入密码
new Promise((resolve, reject) => {var rl2 = readline.createInterface({input: process.stdin,output: process.stdout});//-----将显示输入的密码替换为星号-----//rl2.stdoutMuted = true;rl2._writeToOutput = function _writeToOutput(stringToWrite) {if (rl2.stdoutMuted)rl2.output.write("*");elserl2.output.write(stringToWrite);};//----------------------------------//rl2.on('line', function(line){password = line;rl2.close();resolve();});
}).then(async () => {console.clear();var storage;
console.log("Logging " + email + " in ...");new Promise((resolve, reject) => {storage = mega({email: email, password: password}, () => { resolve(); });
}).then(() => {var folder = storage.root.children.find(x => x.name == folderToDownload);console.log("To Download " + folderToDownload);
console.log("Total Files: " + folder.children.length);for (var x in folder.children) { folder.children[x].download({}, function () {console.log((Number(z) + 1) + "/" + folder.children.length  + " finished");z++;if (z >= folder.children.length) {console.log("begin packing");compressing.zip.compressDir('pixiv', 'pixiv' + new Date().format("yyyyMMddhhmmss") + '.zip').then(() => {console.log('Packing complete!!!');console.log('NOTE: If you want to download from "Download as Zip" in the upper right menu, you must rename this zip file to something else, in the menu next to the zip file, in the file list on the left hand side. Otherwise the zip wont contain the zip you want. This is a ReplIt bug months ago.');console.log('Zip file wont be deleted by the nodejs script. As the downloaded zip would preserve the zip file just deleted. The previous zip file is strongly suggested to delete manually in the file list on the left hand side.');console.log('Program ends');process.exit();}).catch(err => {console.error(err);});}}).pipe(fs.createWriteStream("./pixiv/" + folder.children[x].name)); console.log((Number(x) + 1) + "/" + folder.children.length  + " started");
}});});
});EOF
clear
node run.js
rm -f run.js
rm -rf pixiv

代码写好以后,保存为.sh的文件,在Linux控制台输入sh ./保存的bash脚本文件名.sh即可运行,网盘登录邮箱和密码需要自行输入。

注意密码输入没做隐藏,后续还要改进。密码输入完成后会自动清屏。输入的时候谨防被他人看到,导致网盘账号被盗。

代码已经更正,已经将显示输入的密码改为星号,但不影响回车之后提交的密码内容。但是网络数据包里面的密码仍然是明文,要提防数据包被窃取导致的密码泄露。

Node.js 将MEGA网盘的指定目录下载并打包成ZIP相关推荐

  1. 基于Vue.js和Node.js的个人网盘系统——科技立项中期成果

    基于Vue.js和Node.js的个人网盘系统 个人网盘系统前端使用Vue.js框架,特别使用了Vue3支持的Element Plus组件库.后端使用Node.js提供服务.数据库使用MongoDB. ...

  2. 基于Vue与Node.js的个人网盘

    基于Vue与Node.js的个人网盘 最近由于学校科技立项相关事宜,学习了一些Vue和Node.js相关知识写出了一个功能简陋的小东西.分享一下现在的状况进行纪念,顺便对寒假实现的功能进行总结 登录功 ...

  3. Node.js复制/删除服务器端文件到指定目录文件夹下,并且预判是否存在该目录,如果没有,则递归创建该文件夹目录

    注意,前情提示: 本代码基于<Node.js(nodejs)对本地JSON文件进行增.删.改.查操作(轻车熟路)> 传送门Node.js(nodejs)对本地JSON文件进行增.删.改.查 ...

  4. js 删除服务器文件,Node.js复制/删除服务器端文件到指定目录文件夹下,并且预判是否存在该目录,如果没有,则递归创建该文件夹目录...

    注意,前情提示: 本代码基于<Node.js(nodejs)对本地JSON文件进行增.删.改.查操作(轻车熟路)> 传送门https://blog.csdn.net/qq_37860634 ...

  5. Node.JS项目实战网盘系统-李游Leo-专题视频课程

    Node.JS项目实战网盘系统-110人已学习 课程介绍         Node.JS是一套使用JavaScript语言的后台.它执行Javascript的速度非常快,性能非常好.是近几年来火的公司 ...

  6. 把资料放在网盘的风险有多大?MEGA网盘87GB数据遭泄露

    澳大利亚知名安全研究员Troy Hunt于昨日(1月17日)通过自己的个人网站发文称,有多位粉丝在上周与他进行了联系,告知他"深受欢迎的云存储服务MEGA无意间暴露了大量的文件". ...

  7. html5.js百度网盘,HTML5 Canvas+js仿百度网盘扫描文件过程加载动画

    HTML5 Canvas+js仿百度网盘扫描文件过程加载动画 这是一款简单的HTML5 Canvas+js仿百度网盘扫描文件过程加载动画效果,网盘文件扫描百分比加载动画特效. var w=docume ...

  8. php node 目录,node.js基于fs模块对系统文件及目录进行读写操作的方法详解

    本文主要介绍了node.js基于fs模块对系统文件及目录进行读写操作的方法,结合实例形式分析了nodejs使用fs模块针对文件与目录的读写.创建.删除等相关操作技巧,需要的朋友可以参考下. 如果要用这 ...

  9. 百度网盘海外版上传下载不限速;一季度北京平均月薪达11187元;苹果 CEO 增加新候选人|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  10. 百度文件下载慢怎么办?~教你百度网盘无需VIP离线下载大文件

    百度文件下载慢怎么办?-教你百度网盘无需VIP离线下载大文件 众所周知,百度网盘的文件已经对非会员进行了各种限速.不过由于国内其他网盘基本都残废了,百度网盘作为仅存的少数几个,需求还是很大的,经常会碰 ...

最新文章

  1. python中使用指定GPU
  2. sysctl -p 重新加载文件/etc/sysctl.conf -a 所有参数 -w 临时指定
  3. Composer PHP依赖管理
  4. 「头条推荐技术解析一」运营和业务模式详解
  5. leetcode 198. 打家劫舍 思考分析
  6. java socket oc_Java Socket编程(三) 服务器Sockets
  7. R 学习 - 图形设置中英字体
  8. java(5)---static修饰符
  9. Css学习总结(3)——CSS布局解决方案 - 水平、垂直居中、多列布局、全屏布局
  10. B树插入和删除的各种情况分析
  11. 暴风影音2009 Real插件无法下载安装问题解决
  12. python贴吧-qpython贴吧
  13. RPM常用命令及RPM中文手册
  14. 【NLP】LSTM 唐诗生成器 pytorch 版
  15. ipc通信-共享内存
  16. 网络流算法学习笔记——最大流问题基本概念和Ford-Fulkerson方法(标号法C++实现)
  17. Linux进程间通信方式
  18. 最新的服务器cpu有国产的吗,浪潮发布国产飞腾CPU服务器 已达业界主流水平
  19. 明明有本事,为什么难升职?
  20. 使用adb的时候出现 adb不是内部或者外部命令如何解决

热门文章

  1. RapidMiner Studio 设计视图
  2. 数学建模-Logistic模型
  3. 海量数据处理 算法总结
  4. Netlogo入门(二)
  5. 元宇宙需要“基建狂魔”
  6. php侧边客服,利用jquery实现网页侧边栏在线客服代码
  7. 三字代码html,【涨知识】原来三字代码是这样来的!四字代码是什么?
  8. 自定义快捷键整理 - Windows
  9. 公司IT管理制度——案例分享
  10. 离合器膜片弹簧的优化设计matlab,基于matlab目标函数的建立优化离合器膜片弹簧的设计研究.doc...