123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- 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;
|