背景介绍
背景还是有必要介绍一下的。
因为百度云已经把小电影封杀的都成了8秒教育片,115的会员费高的离谱,于是它们的替代品hei科li线云
就急需出现了。
为了下载百度云的普通文件,有一个专门为了推送百度云的下载链接到Aria2的Chrome扩展BaiduExporter,还有针对115的Chrome扩展115exporter。
根据他们的思路,扩展是可以解决以前那种纯手工的复制粘贴办法的,于是研究了一下他们的代码。
- 首先是找到下载的链接,这个功能以前已经实现了。
- 然后是把找到的链接推送到Aira2服务器(当然,首先肯定要自己先建好Aira2服务器,最好外网可以访问的那种)
其中Aira2服务器可以参考Aria2英文官网,不管你是把Aira2安装到哪里,都可以在网上找到对应的教程。
然后通过代码推送链接,我只是研究了一下BaiduExporter项目的相关代码,了解了最基础的用法。
再深一点的功能,我也没有用到,我也不了解。
这些就足够了,于是开始吧。
以下目标网站
都是代表的http://lx点heikeyun点net
以前原始的办法
现今的科技自动化
这里可以详细的分析一下怎么把扩展程序无缝结合到目标网站。
目标网站使用的UI是MZUI。
需要注意的是扩展程序是不能直接调用目标网站的JS的,如果有交叉的JS,我的解决办法是把它的代码复制一份,放到自己的扩展程序中。
项目中添加了jquery-3.3.1.min.js
,mzui.js
,toURL.js
,其中前两个是网上下载的,最后一个是解析下载地址需要用到的js。
另外项目主要的功能都放到了myHeike.js
中。
先添加Aira2下载按钮(方法startListen)
主要代码如下:
1 | ... |
根据目标网站的html
代码,添加一个类似的按钮Aria2
,并绑定了点击事件this.getDownloadURL()
。
得到下载链接(方法:getDownloadURL)
1 | ... |
需要注意,代码都封装在一起,里面的this
每次指向的并不是当前的js类。这个就把我弄的头晕了。
当然这个方法是参考的目标网站的js,因为扩展程序都是在网页上运行的,所以设备都确定为'tp': 'web'
。
得到下载地址后,就需要使用方法sendURL方法把链接推送到Aira2服务器。
推送Aira2下载链接(方法:sendUrl)
1 | ... |
这是最基础的发送下载URL到Aria2服务器的方法,其中rpcData
的params
参数,可能加入的字段应该有好多,只是暂时只用了这几个字段而已。
推送方法直接使用$.post方法,把rpcData
转成json格式的数据就可以推送过去了。返回的数据,当出现错误的时候(暂时没有遇到),就不能添加成功。
当然出现错误时的提示功能还需要完善。
到此为止,其实就实现了全部的核心功能。
但是很多时候是不能把Aria2服务器的地址直接写到程序里的,那样可移植性就很差了,需要加入自定义Aria2服务器的界面。
存储自定义字段的值,可以使用浏览器自带的localStorage
,明文存储应该也没多大影响。因为毕竟客户端程序,能实现复杂的加密也不现实。
自定义Aria2服务器的方法
根据需要,选择浏览。
在目标网页的指定页面,左下角加入了一个按钮,默认是隐藏的,点击后可以弹出自定义界面。
自定义界面(方法:initHeike)
1 | ... |
此段程序可能比较啰嗦,主要是用来控制界面的显示。
填写好Aira2服务器地址后,需要测试Aria2服务器是否可用。这里就需要用到getRPCVersion
方法测试其连通性。
测试Aira2服务器是否可用(方法:getRPCVersion)
1 | ... |
这个和推送URL方法类似,只是发送的参数有点不一样。
如果Aria2服务器地址没有问题,就会返回Aria2的版本号。
如果连接不成功,可能什么都不返回,连接都不会成功,估计是404。
尾声
我几乎把整个代码都贴上来了。
我就是啰嗦而且找不到重点。
我把代码放到了Github上HeiKeExport。
程序目前是有问题的,我只在两台电脑上测试过,一台是本机,也就是开发这个扩展程序的电脑,扩展测试正常,打包扩展程序HeiKeExport.crx
;另一台安装安装前面打包的扩展程序HeiKeExport.crx
,提示程序出错。
但是把整个代码解压到新电脑以后,新电脑开启开发者模式,加载正在开发的扩展程序,是没有问题的。
于是,我怀疑是新电脑的Chrome版本的问题。