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();
};