comichandler.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. var $ = require("cheerio");
  2. var request = require('request');
  3. var agent = require("socks5-http-client/lib/Agent");
  4. var fs = require('fs');
  5. var ListHandler = require('./listhandler.js');
  6. require('./config.js');
  7. var ComicHandler = {
  8. NowIndex:0,
  9. ListTree:[],
  10. start:function(fromComicID){
  11. if(!this.ListTree.length) this.ListTree = ListLib.tree;
  12. if(fromComicID){
  13. for(var i in this.ListTree){
  14. if(this.ListTree[i]==fromComicID);
  15. this.NowIndex = i;
  16. break;
  17. }
  18. }
  19. if(this.NowIndex==this.ListTree.length){
  20. console.log('Comic Download Complete');
  21. }else{
  22. var comicID = this.ListTree[this.NowIndex];
  23. new ComicSaver(comicID);
  24. this.NowIndex++;
  25. }
  26. }
  27. }
  28. var ComicSaver = function(comicID){
  29. var ep = 0;
  30. var nowEp = 0;
  31. var imgLength = 0;
  32. var imgDownloaded = 0;
  33. var retryTimes = {};
  34. var comicOBJ = ListLib[comicID];
  35. if(!comicOBJ){
  36. console.log('ComicID '+comicID+' wrong!');
  37. return;
  38. }
  39. console.log('[BEGIN] Start Download Comic [ '+comicID+' ]');
  40. console.log('Creating directory for [ '+comicOBJ.name+' ]');
  41. var comicPath = './save/'+comicOBJ.id+'-'+comicOBJ.name+'/';
  42. if(!fs.existsSync(comicPath)){
  43. fs.mkdirSync(comicPath);
  44. }
  45. var options = {
  46. url:ApiURL.comicEp.replace('{ComicID}',comicOBJ.id)
  47. }
  48. console.log('Analysing......');
  49. request(options,function(error,response,body){
  50. if(!error && body){
  51. var data = JSON.parse(body);
  52. ep = data['ep_count'];
  53. nowEp = 1;
  54. console.log('Analysie Success!');
  55. console.log('Comic [ '+comicOBJ.id+' ] has [ '+ep+' ] EP!!!');
  56. downloadEP();
  57. }else{
  58. console.log('Comic [ '+comicOBJ.id+' ] analysie error!!!');
  59. }
  60. });
  61. function downloadEP(){
  62. if(nowEp>ep){
  63. finished();
  64. return;
  65. }
  66. var opt = {
  67. url:ApiURL.comic.replace('{ComicID}',comicOBJ.id).replace('{EP}',nowEp)
  68. }
  69. console.log('Comic [ '+comicOBJ.id+' ] start download!!!');
  70. var epPath = comicPath+nowEp+'/';
  71. if(!fs.existsSync(epPath)){
  72. fs.mkdirSync(epPath);
  73. }
  74. request(opt,function(error,response,body){
  75. if(!error && body){
  76. var data = JSON.parse(body);
  77. imgLength = data.length;
  78. console.log('Comic [ '+comicOBJ.id+' ] EP [ '+nowEp+' ] has [ '+imgLength+' ] images!!!');
  79. console.log('Comic [ '+comicOBJ.id+' ] EP [ '+nowEp+' ] images start download!!!');
  80. for(var i in data){
  81. retryTimes[data[i]['url']] = 0;
  82. saveImg(data[i]['url']);
  83. }
  84. }else{
  85. console.log(error);
  86. console.log(body);
  87. console.log('Comic [ '+comicOBJ.id+' ] download error!!!');
  88. }
  89. });
  90. }
  91. function saveImg(imgSrc){
  92. if(!imgSrc){
  93. console.log('Comic [ '+comicOBJ.id+' ] image download error!!!');
  94. console.log('Image [ '+imgSrc+' ] error');
  95. }
  96. var splitURL = imgSrc.split('/');
  97. var opt = {
  98. url:imgSrc,
  99. encoding:'binary'
  100. }
  101. request(opt,function(error,response,body){
  102. if(!error && body){
  103. var data = body;
  104. var name = splitURL[splitURL.length-1];
  105. var savePath = comicPath+nowEp+'/'+name;
  106. fs.writeFileSync(savePath,data,'binary');
  107. imgDownloaded++;
  108. if(imgDownloaded==(imgLength-1)){
  109. nowEp++;
  110. downloadEP();
  111. }
  112. }else{
  113. if(retryTimes[imgSrc]==3){
  114. console.log('Comic [ '+comicOBJ.id+' ] image download error!!!');
  115. console.log('Image [ '+imgSrc+' ] error');
  116. }else{
  117. retryTimes[imgSrc]++;
  118. saveImg(imgSrc);
  119. console.log('Image [ '+imgSrc+' ] redownload!');
  120. }
  121. }
  122. });
  123. }
  124. function finished(){
  125. console.log('[FINISH] Comic [ '+comicOBJ.id+' ] All File Downloaded!!!');
  126. }
  127. }
  128. module.exports = ComicHandler;