跳到主要内容

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 确实是可用的,有兴趣的朋友可以试试。

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

阅读微信公众号文章
Loading Comments...