16
2021
08

AutoJs download photo with multithreads

url = "https://imgbin.com/free-png/re-zero/"

//url = "https://imgbin.com/free-png/anime"

//url = "https://imgbin.com/free-png/order-a-rabbit/1"

//var folder = "點兔/"

var folder = "Rezero/"

//var folder = "Anime/"

var folder_path = files.getSdcardPath()+"/autojsphoto/"+folder

files.ensureDir(folder_path);

 

var threadsTotal = 8;

 

run_script(url, threadsTotal, folder_path);

 

function run_script(url, threadsTotal, folder_path) {

  toast("圖片下載中");

 

  var pagesTotal = getPageTotal(url);

  toastLog("有" + pagesTotal + "頁");

 

  var Images = getImages(url, pagesTotal)

  toastLog("有" + (Images.length) + "張");

 

  var assignLink = getAssignLink(Images,threadsTotal);

 

  var threadsFunction = getThreadsFunction(threadsTotal);

  download(threadsFunction,threadsTotal,assignLink,folder_path);

 

  alert("finished");  

}

 

function getPageTotal(url) {

  try {

    return parseInt(http.get(url).body.string().match(/\/.*(\d)\D+Last/)[1]);

  } catch (e) {

      return 1;

    }

}

 

function getImages(url,pagesTotal) {

  var arr = [];

  var website = "https://imgbin.com";

  var startPage = parseInt(url[url.length-1]) || 0;

  

  for(var i = startPage; i < pagesTotal+1; i++) {

    arr.push(http.get(url).body.string().match(/\/png(.*?)\-png/g));      

  

    var url = url.replace(/\/\d$|\/$/g,"")+"/"+(i+1).toString();

  }

  

  return arr.reduce((arr1,arr2) => arr1.concat(arr2), []) 

  .map(item => website + item + "-png");

}

 

function getAssignLink(Images,threadsTotal) {

  var obj = {}

  for(var i=0; i<threadsTotal; i++) {

    obj["thread"+i] = Images.filter((item,index) => index % threadsTotal === i)

  }

  return obj;

}

 

function getThreadsFunction(threadsTotal) {

  var data = {};

  

  data.Threads = new Array (threadsTotal);

  data.arr = [];

  

  for(var i=0; i<threadsTotal; i++) {

    data["download_Images"+i] = (assignLink,i,threadsTotal,folder_path,data) => {

      

      for(data["var"+i] = 0; data["var"+i] < assignLink["thread"+i].length; data["var"+i]++) {        

        data["index"+i] = (data["var"+i]*threadsTotal) + i;   

        data["http_content"+i] = http.get(assignLink["thread"+i][data["var"+i]]).body.string();   

        data["image_url"+i] = data["http_content"+i].match(/http(.*?)\.jpg/)[0];

        

        data["bytes"+i] = http.get(data["image_url"+i]).body.bytes(); 

        files.writeBytes(folder_path + String("00000" + (data["index"+i]+1)).slice(-5) + ".jpg", data["bytes"+i])

        

        //console.log("thread"+i+": "+data["index"+i])    

      }

    

    }

    data.arr.push(i);

  }

  return data;

};

  

function download(threadsFunction,threadsTotal,assignLink,folder_path) {

  threadsFunction.arr.forEach(Number => {

    threadsFunction.Threads[Number] = threads.start(function(){

      threadsFunction["download_Images"+Number] (assignLink,Number,threadsTotal,folder_path,threadsFunction);

    })

  })

  

  for(var k=0; k<threadsTotal; k++) 

    threadsFunction.Threads[k].join();

};

 

 



« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。