|
@@ -0,0 +1,142 @@
|
|
|
+var $ = require("cheerio");
|
|
|
+var request = require('request');
|
|
|
+var agent = require("socks5-http-client/lib/Agent");
|
|
|
+var fs = require('fs');
|
|
|
+var ListHandler = require('./listhandler.js');
|
|
|
+
|
|
|
+require('./config.js');
|
|
|
+
|
|
|
+
|
|
|
+var ComicHandler = {
|
|
|
+ NowIndex:0,
|
|
|
+ ListTree:[],
|
|
|
+ start:function(fromComicID){
|
|
|
+ if(!this.ListTree.length) this.ListTree = ListLib.tree;
|
|
|
+ if(fromComicID){
|
|
|
+ for(var i in this.ListTree){
|
|
|
+ if(this.ListTree[i]==fromComicID);
|
|
|
+ this.NowIndex = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(this.NowIndex==this.ListTree.length){
|
|
|
+ console.log('Comic Download Complete');
|
|
|
+ }else{
|
|
|
+ var comicID = this.ListTree[this.NowIndex];
|
|
|
+ new ComicSaver(comicID);
|
|
|
+ this.NowIndex++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+var ComicSaver = function(comicID){
|
|
|
+ var ep = 0;
|
|
|
+ var nowEp = 0;
|
|
|
+ var imgLength = 0;
|
|
|
+ var imgDownloaded = 0;
|
|
|
+ var retryTimes = {};
|
|
|
+
|
|
|
+ var comicOBJ = ListLib[comicID];
|
|
|
+ if(!comicOBJ){
|
|
|
+ console.log('ComicID '+comicID+' wrong!');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log('[BEGIN] Start Download Comic [ '+comicID+' ]');
|
|
|
+ console.log('Creating directory for [ '+comicOBJ.name+' ]');
|
|
|
+ var comicPath = './save/'+comicOBJ.id+'-'+comicOBJ.name+'/';
|
|
|
+ if(!fs.existsSync(comicPath)){
|
|
|
+ fs.mkdirSync(comicPath);
|
|
|
+ }
|
|
|
+
|
|
|
+ var options = {
|
|
|
+ url:ApiURL.comicEp.replace('{ComicID}',comicOBJ.id)
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log('Analysing......');
|
|
|
+
|
|
|
+ request(options,function(error,response,body){
|
|
|
+ if(!error && body){
|
|
|
+ var data = JSON.parse(body);
|
|
|
+ ep = data['ep_count'];
|
|
|
+ nowEp = 1;
|
|
|
+ console.log('Analysie Success!');
|
|
|
+ console.log('Comic [ '+comicOBJ.id+' ] has [ '+ep+' ] EP!!!');
|
|
|
+ downloadEP();
|
|
|
+ }else{
|
|
|
+ console.log('Comic [ '+comicOBJ.id+' ] analysie error!!!');
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ function downloadEP(){
|
|
|
+ if(nowEp>ep){
|
|
|
+ finished();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ var opt = {
|
|
|
+ url:ApiURL.comic.replace('{ComicID}',comicOBJ.id).replace('{EP}',nowEp)
|
|
|
+ }
|
|
|
+ console.log('Comic [ '+comicOBJ.id+' ] start download!!!');
|
|
|
+ var epPath = comicPath+nowEp+'/';
|
|
|
+ if(!fs.existsSync(epPath)){
|
|
|
+ fs.mkdirSync(epPath);
|
|
|
+ }
|
|
|
+ request(opt,function(error,response,body){
|
|
|
+ if(!error && body){
|
|
|
+ var data = JSON.parse(body);
|
|
|
+ imgLength = data.length;
|
|
|
+ console.log('Comic [ '+comicOBJ.id+' ] EP [ '+nowEp+' ] has [ '+imgLength+' ] images!!!');
|
|
|
+ console.log('Comic [ '+comicOBJ.id+' ] EP [ '+nowEp+' ] images start download!!!');
|
|
|
+ for(var i in data){
|
|
|
+ retryTimes[data[i]['url']] = 0;
|
|
|
+ saveImg(data[i]['url']);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ console.log(error);
|
|
|
+ console.log(body);
|
|
|
+ console.log('Comic [ '+comicOBJ.id+' ] download error!!!');
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ function saveImg(imgSrc){
|
|
|
+ if(!imgSrc){
|
|
|
+ console.log('Comic [ '+comicOBJ.id+' ] image download error!!!');
|
|
|
+ console.log('Image [ '+imgSrc+' ] error');
|
|
|
+ }
|
|
|
+ var splitURL = imgSrc.split('/');
|
|
|
+ var opt = {
|
|
|
+ url:imgSrc,
|
|
|
+ encoding:'binary'
|
|
|
+ }
|
|
|
+ request(opt,function(error,response,body){
|
|
|
+ if(!error && body){
|
|
|
+ var data = body;
|
|
|
+ var name = splitURL[splitURL.length-1];
|
|
|
+ var savePath = comicPath+nowEp+'/'+name;
|
|
|
+ fs.writeFileSync(savePath,data,'binary');
|
|
|
+ imgDownloaded++;
|
|
|
+ if(imgDownloaded==(imgLength-1)){
|
|
|
+ nowEp++;
|
|
|
+ downloadEP();
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(retryTimes[imgSrc]==3){
|
|
|
+ console.log('Comic [ '+comicOBJ.id+' ] image download error!!!');
|
|
|
+ console.log('Image [ '+imgSrc+' ] error');
|
|
|
+ }else{
|
|
|
+ retryTimes[imgSrc]++;
|
|
|
+ saveImg(imgSrc);
|
|
|
+ console.log('Image [ '+imgSrc+' ] redownload!');
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ function finished(){
|
|
|
+ console.log('[FINISH] Comic [ '+comicOBJ.id+' ] All File Downloaded!!!');
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+module.exports = ComicHandler;
|