|
|
|
@ -1,65 +0,0 @@
|
|
|
|
|
// node pixiv-downloader.js <tags> -p [numpages] -s [startpage] [-r]
|
|
|
|
|
var argv = require("minimist")(process.argv.slice(2), {
|
|
|
|
|
default: {
|
|
|
|
|
"p": 1,
|
|
|
|
|
"s": 1
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
var query = argv._.join(" ");
|
|
|
|
|
var puppeteer = require("puppeteer");
|
|
|
|
|
var download = require("download");
|
|
|
|
|
var fs = require("fs");
|
|
|
|
|
|
|
|
|
|
(async function(){
|
|
|
|
|
var browser = await puppeteer.launch({
|
|
|
|
|
headless: false,
|
|
|
|
|
userDataDir: process.cwd() + "/chromium_data"
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var page = await browser.newPage();
|
|
|
|
|
await page.setContent(`login to <a target="_blank" href="https://accounts.pixiv.net/login">pixiv</a> if necessary, then close this page to continue.`);
|
|
|
|
|
await new Promise(r => page.on("close", r));
|
|
|
|
|
|
|
|
|
|
var page = await browser.newPage();
|
|
|
|
|
for (let i = argv.s; i < argv.s + argv.p; i++) {
|
|
|
|
|
let url = `https://www.pixiv.net/ajax/search/artworks/${encodeURIComponent(query)}?order=popular_d&mode=${argv.r ? "all" : "safe"}&p=${i}`;
|
|
|
|
|
console.log("get page", i, url);
|
|
|
|
|
await page.goto(url);
|
|
|
|
|
let data = JSON.parse(await page.evaluate(() => document.querySelector("body").innerText));
|
|
|
|
|
if (data.error) throw data.message;
|
|
|
|
|
for (let item of data.body.illustManga.data) {
|
|
|
|
|
let url = `https://www.pixiv.net/ajax/illust/${item.id}/pages`;
|
|
|
|
|
console.log("get", url);
|
|
|
|
|
await page.goto(url);
|
|
|
|
|
let data = JSON.parse(await page.evaluate(() => document.querySelector("body").innerText));
|
|
|
|
|
if (data.error) {
|
|
|
|
|
console.error(error.message);
|
|
|
|
|
} else {
|
|
|
|
|
for (let image of data.body) {
|
|
|
|
|
let url = image.urls.original;
|
|
|
|
|
console.log("download", url);
|
|
|
|
|
if (!fs.existsSync("download")) fs.mkdirSync("download");
|
|
|
|
|
let filename = url.split('/').pop();
|
|
|
|
|
let filedir = "download/" + query + "/";
|
|
|
|
|
if (!fs.existsSync(filedir)) fs.mkdirSync(filedir);
|
|
|
|
|
let filepath = filedir + filename;
|
|
|
|
|
if (fs.existsSync(filepath)) {
|
|
|
|
|
console.log(filename, "already exists");
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
let write = fs.createWriteStream(filepath);
|
|
|
|
|
download(url, {
|
|
|
|
|
headers: {
|
|
|
|
|
"Referer": "https://www.pixiv.net"
|
|
|
|
|
}
|
|
|
|
|
}).pipe(write);
|
|
|
|
|
await new Promise(r => write.on("close", r));
|
|
|
|
|
console.log("saved", filename)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
console.log("complete");
|
|
|
|
|
await browser.close();
|
|
|
|
|
})();
|
|
|
|
|
|