由于最近心血来潮,想在kindle上看看漫画版的万年小学生《名侦探柯南》,所以就在网上找了一大圈,但没有找到合适的打包下载的资源,倒是在线观看的有很多(当然也包括手机上的漫画应用)。所以最后决定自己做一个下载器,下载漫画的同时也可以有一丁点的成就感,一举两得。
找到了一个在线看漫画的网站(具体网址就不在这里说了),简单看了一下html的源代码,发现漫画图片的链接实际上是放在js文件里边的。然后又顺藤摸瓜找到了js文件,格式大致如下:
var comicName = "名侦探柯南";var nextVolume="/HTML/MZTKN/801/";var preVolume="/HTML/MZTKN/799/";var picCount = 16;var picAy = new Array();var hosts = ["http://coldpic.sfacg.com","http://coldpic.sfacg.com", "http://58.241.186.156:88"];picAy[0] = "/Pic/OnlineComic2/MZTKN/800/001_9406.png";picAy[1] = "/Pic/OnlineComic2/MZTKN/800/002_4323.png";picAy[2] = "/Pic/OnlineComic2/MZTKN/800/003_6688.png";picAy[3] = "/Pic/OnlineComic2/MZTKN/800/004_1607.png";picAy[4] = "/Pic/OnlineComic2/MZTKN/800/005_9203.png";picAy[5] = "/Pic/OnlineComic2/MZTKN/800/006_8753.png";picAy[6] = "/Pic/OnlineComic2/MZTKN/800/007_3110.png";picAy[7] = "/Pic/OnlineComic2/MZTKN/800/008_0507.png";picAy[8] = "/Pic/OnlineComic2/MZTKN/800/009_7960.png";picAy[9] = "/Pic/OnlineComic2/MZTKN/800/010_1023.png";picAy[10] = "/Pic/OnlineComic2/MZTKN/800/011_3012.png";picAy[11] = "/Pic/OnlineComic2/MZTKN/800/012_2273.png";picAy[12] = "/Pic/OnlineComic2/MZTKN/800/013_6487.png";picAy[13] = "/Pic/OnlineComic2/MZTKN/800/014_7072.png";picAy[14] = "/Pic/OnlineComic2/MZTKN/800/015_8199.png";picAy[15] = "/Pic/OnlineComic2/MZTKN/800/016_9795.png";
看到这里,立刻觉得没有问题了。原理很简单:
1. 在线读取入口js文件
2. 动态解析之:获取"current volume"的图片路径(一个array),获取"next volume"的路径
3. 下载"current volume"的图片
4. 将"next volume"对应的js路径构建出来(如何构建?好好观察一下网站就能发现规律),转至1
5. 当"next volume"的值为结束标记(看一下最后一个volume的js文件就可以发现)时,停止循环。至此,下载结束
原理了解之后,接下来就是code了。用什么语言来实现呢?本来想别出心裁(对于我自己来说)用perl脚本(正好学习一下)来实现,但是最终发现自己太懒了,还是老老实实用java搞定了。
主要用到了几个java解析javascript的几个api,具体可以见项目源代码(见最后)。
P.S.
1. 如果本文不小心被漫画网站的小编看到了,觉得我侵害到了版权,可以私信与我联系
2. 项目源代码:https://github.com/fimh/JSParse