Advertisement
dragonfree97

Untitled

Apr 5th, 2020
387
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var request = require("request");
  2. var fs = require("fs");
  3. var parseString = require('xml2js').parseString;
  4. var htmlToJson = require('html-to-json');
  5. var itemnames = require('./output/itemurls2.json');
  6.  
  7. const selector = ".post-image-container";
  8. const url = "https://i.imgur.com/$1.png";
  9.  
  10. // Change this section!!
  11.  
  12. const kevinfolder = "./resources/NH Furniture Images/Miscellaneous/";
  13. const dir = "./output/furnitures/miscellaneous/$1 ($2).png";
  14. const sheet = "./sheet3.xml";
  15.  
  16. var download = function(uri, filename, callback){
  17.   request.head(uri, function(err, res, body){
  18.     // console.log('content-type:', res.headers['content-type']);
  19.     // console.log('content-length:', res.headers['content-length']);
  20.     request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
  21.   });
  22. };
  23.  
  24. var getKevinList = function(dir) {
  25.     var kevin = {};
  26.     var maxcount_k = 0;
  27.     var count_k = 0;
  28.  
  29.     fs.readdirSync(dir).forEach(file => {
  30.         maxcount_k++;
  31.     });
  32.     console.log("Number of files: "+maxcount_k);
  33.  
  34.     fs.readdirSync(dir).forEach(file => {
  35.         var name = file.substring(0,file.lastIndexOf("."));
  36.         var ext = file.substring(file.lastIndexOf("."));
  37.         kevin[name] = {}
  38.         count_k++;
  39.         if (count_k == maxcount_k) {
  40.             fs.writeFile("./output/kevin.json", JSON.stringify(kevin, null, "\t"));
  41.             return kevin;
  42.         }
  43.     });
  44.    
  45.     return kevin;
  46. }
  47.  
  48. var getURLs = async function(kevin, xmlsheet) {
  49.     let promise = new Promise((resolve, reject) => {
  50.         fs.readFile(xmlsheet, (err, result) => {
  51.             parseString(result, function (err, result) {
  52.                 fs.writeFile('./output/parsedxml.json', JSON.stringify(result.worksheet.sheetData[0], null, "\t"));
  53.                 resolve(result.worksheet.sheetData[0]);
  54.             });
  55.         });
  56.     });
  57.    
  58.     let sheet = await promise;
  59.     var itemurls_arr = [];
  60.  
  61.     let urls = new Promise((resolve, reject) => {
  62.         for (item in kevin) {
  63.             kevin[item].name = item;
  64.             itemurls_arr.push(kevin[item]);
  65.         }
  66.  
  67.         var j = 0;
  68.         for (var i = 0; i < itemurls_arr.length; i++) {
  69.             while(!sheet.row[j].c[1].f) {
  70.                 j++;
  71.             }
  72.             console.log(("Processing row "+j+". In theory, $1 should be on this row.").replace("$1", itemurls_arr[i].name));
  73.             if(sheet.row[j].c[1].f) {
  74.                 var url = sheet.row[j].c[1].f[0]
  75.                 url = url.substring(url.indexOf('"')+1,url.lastIndexOf('"'));
  76.                 // console.log(i + ": " + itemurls_arr[i-1].name + ", " + url);
  77.                 itemurls_arr[i].url = url;
  78.                 // get customization urls
  79.                 if(sheet.row[j].c[2].f) {
  80.                     var url = sheet.row[j].c[2].f[0]
  81.                     url = url.substring(url.indexOf('"')+1,url.lastIndexOf(',')-1);
  82.                     itemurls_arr[i].album = url;
  83.                 }
  84.             } else {
  85.                 console.log("f does not exist for "+itemurls_arr[i].name);
  86.             }
  87.             j++;
  88.         }
  89.         resolve(itemurls_arr);
  90.     });
  91.    
  92.     let result = await urls;
  93.     return result;
  94. }
  95.  
  96. var downloadImagesFromAlbum = function(album, filename) {
  97.     htmlToJson.request(album, [selector, function($item) {
  98.             return $item[0].attribs.id;
  99.         }])
  100.         .done(function(items) {
  101.             for (var i = 0; i < items.length; i++) {
  102.                 (function(items){
  103.                     var fn = filename.replace("$2", i)
  104.                     download(url.replace("$1", items[i]), fn, function(){
  105.                         console.log('done '+fn);
  106.                     })
  107.                 })(items);
  108.             }
  109.         });
  110. }
  111.  
  112. var main = async function() {
  113.     var kevinlist = getKevinList(kevinfolder);
  114.     getURLs(kevinlist, sheet).then((itemnames) => {
  115.         var errors = [];
  116.         var count = 0;
  117.         setInterval(function() {
  118.             var item = itemnames[count];
  119.             if(!item.url) {
  120.                 errors.push(item.name);
  121.             } else if(!item.album) {
  122.                 console.log("Album does not exist for "+item.name);
  123.                 fn = dir.replace("$1",item.name).replace("$2","0");
  124.                 download(item.url, fn, function(){
  125.                     console.log('done '+fn);
  126.                 });
  127.             } else {
  128.                 downloadImagesFromAlbum(item.album, dir.replace("$1", item.name));
  129.             }
  130.             count++;
  131.             if (count == 7) {
  132.                 fs.writeFile("./output/errors.txt", errors.join(", "));
  133.             }
  134.         }, 1000);
  135.     })
  136. }
  137.  
  138. main();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement