跳到主要内容

Adapp 自动下载应用程序

阅读需 7 分钟

根据你的配置文件,自动下载配置内的所有软件的安装包。一次书写文件,多次直接下载

自动下载应用程序 (Adapp)

automatically download the application by providing json

根据你的配置文件,自动下载配置内的所有软件的安装包。一次书写文件,多次直接下载。

Adapp 就相当于一个接口,省去一个个找软件包的麻烦。

但它的可替代性是非常强的。当这篇文章快要结尾的时候,我发现了更为简单的办法 =。=

下面这篇文章,大家理解一下我的思路就可以了,我会在最后说明。

安装

需要在 Nodejs 环境下运行。

Nodejs 下载地址:http://nodejs.cn/download/;

Nodejs 安装推荐教程:http://www.runoob.com/nodejs/nodejs-install-setup.html。

Adapp 源代码下载地址:https://github.com/evenIfAlsoGo/adapp

下载源代码压缩包:

图片

压缩包解压,在 adapp.js 目录下 shift+右键->在此处打开命令窗口->输入以下命令->

$ npm  install //下载 Adapp 的依赖
$ node adapp.js //下载 json 内配置的软件安装包,这里会下载一个 chromium 浏览器0.0

安装包会出现在 dist 文件夹内~

关于 JSON 文件

json 样式:

[
{
"name" : "notepad",
"versions" : "7.0",
"url" : "http://rj.baidu.com/soft/detail/13478.html"
},
{
"name" : "notepad++",
"versions" : "7.0",
"url" : "http://rj.baidu.com/soft/detail/28093.html"
},
...
]

name 为下载完成的软件包名称。

也许你已经注意到软件的 url 地址,是的,Adapp 也算是一个爬虫插件。

url 为该软件在百度软件中心的页面地址。

versions 现在并没有用到,因为 Adapp 不会提供软件更新功能。但是也许在将来会由另一个插件进行更新软件工作。所以 json 内可以不填写版本。

你既可以自己编写 json 文件,也可以使用我提供的 json 文件(存在 example 文件内,我的推荐软件列表),对于 json 文件,你可以随时添加内容,为了下一次安装软件提供便利。

谷歌辅助插件

你不必为书写文件而忧虑。

我会提供一个谷歌浏览器插件,用来生成 json 文件,你只需要浏览软件页面,为自己喜欢的软件点一个赞,其余事情工具会帮你完成。

【此处应该有插件使用演示GIF图】

这个插件同样在我的 Github 内下载。

(写了一些,不过现在没有必要写了。。)

百度软件中心

Adapp 是我在 window 系统下没有找到合适的包管理器,突发奇想做出来的,功能非常简单,耦合性也很高。但是这都是没有办法的,我并没有能力来提供数以万计的软件,也没有能力保证软件的及时更新,而这些事情软件中心可以做到。采用百度软件中心的原因是,下载速度非常快,软件包(我用过的)都挺干净。

写代码时的故事

写 Adapp 的时候,我换了四个库!

最初我通过获取软件下载页面的源代码,和 cheerio 工具查找其 dom 节点来获取软件的下载链接,但是我无论如何都不能得到需要的链接。然后我自建了一个网页,用 json 内的数据填充了 dom 节点,也无法获取!这时我才发现,cheerio 不能分析动态生成的网页的节点,它不会运行 JavaScript,而百度软件页面的数据都在 script 标签内,我自建的网页的 dom 节点也是由 Js 生成的。

接下来在我接触到另一个库之前,我还尝试了很多方法,比如爬取网页专门获取那些藏在 script 内的数据,然后解析 json 拿到链接,太麻烦…;以及写了一个十分简单的谷歌插件来获取下载链接,虽然成功了,这个想法很快就被自己否决了,我为什么不直接在下载按钮上直接右键“复制地址”呢?

我最终决定从动态网页入手,这时我接触到了 phantomjs,它是一个隐形的浏览器,这样我们就可以直接查找 dom 节点获取数据了!当我兴高采烈的完成大部分代码的时候,我发现了一个问题,我该如何下载文件呢?直接访问链接无法下载exe文件。查找文档无果的情况下,我接触到了 casperjs,它是基于 phantomjs 编写的,功能更加完善,对于下载链接,一个 download 方法就解决了。

在使用 casperjs 的时候,我第一次成功下载到了软件!证明了我的想法是可以实施的。但是兴奋之后就跌入了谷底,我又遇到了新的问题,我怎么将 json 的数据导入程序呢?这里的问题,应该属于我的基础不牢固,按理讲,casper 模块外面是 nodejs 环境,没有不能导入 json 的说法,但是我怎么样都不行,数据根本进不去,进去了也不能通过点运算符直接获得。于是…

我又换了 puppeteer 库,这是谷歌官方编写的,功能确实比之前的库强大。获取 Json 两行代码就拿到数据了,只是我又在下载部分卡核了!因为它会启动一个谷歌浏览器(当你设置可见时,你可以看到它操作的过程),而问题正出于此。下载exe文件之后,浏览器会询问保存或放弃,难道每次都需要用户再点一下吗?文档也并未与此问题有关的 API,最后我导入了一个 download 库,使用这个库的方法解决了问题。

代码经历了种种磨难总算能自动化的完成了,根据 json 文件内的地址,自动下载所有文件的安装包。

本来还打算将代码上传至 npm ,大家就可以直接安装这个插件,而不是需要去 Github 上获取源码,能更加简单些。但是因为从未有过类似经验,又会是一大笔时间支出,而最近有些事情需要解决,时间不多,所以试试了没有成功就没有考虑了。

最后

大家有没有认为 json 文件相当于收藏夹?而谷歌插件相当于“加入收藏“的按钮?

而这个软件基于百度软件中心,所以我们为什么不在软件页面直接进行收藏到账号内呢?

![图片](data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='1px' height='1px' viewBox='0 0 1 1' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' fill-opacity='0'%3E%3Cg transform='translate(-249.000000, -126.000000)' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

当我进行这个操作之后,我检查了“我的收藏”页面的代码,乖乖,直接一波遍历获取了所有的下载链接。而且数据保存在账号内,也不用担心文件丢失。现在可真的是,只需要一个爬虫了!

图片

我考虑了账号登录的问题:一是在爬虫内加上账户登录过程,二是用 puppetter 打开自己已经登录了账户的浏览器,直接访问,不过不知道可行性。

当然对于普通用户而言,直接收藏常用软件,需要的时候,直接点击下载按钮恐怕更加方便吧。不可能说,为了使用一句命令行,就花费更多的时间去研究怎么搭建环境吧,本末倒置了。

推荐软件的 json 文件这几天内我做好之后会直接上传到 Github 内,此外 Adapp 确实是可用的,有兴趣的朋友可以试试。

总觉得少了点什么…不过先到此为止吧!

暂时未加入评论功能,请在对应公众号文章下或 GitHub Issues下留言反馈。