|
|
|
@@ -1,16 +1,8 @@
|
|
|
|
|
var fs = require("fs");
|
|
|
|
|
var {Readable} = require("stream");
|
|
|
|
|
|
|
|
|
|
if (!fs.existsSync("collection")) fs.mkdirSync("collection");
|
|
|
|
|
var {UserID, Cookie} = require("./config.json");
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
var lastartwork = require("./lastartwork.json");
|
|
|
|
|
} catch (error) {
|
|
|
|
|
var lastartwork = {
|
|
|
|
|
id: undefined,
|
|
|
|
|
index: -1
|
|
|
|
|
};
|
|
|
|
|
async function sleep(seconds) {
|
|
|
|
|
await new Promise(resolve => setTimeout(resolve, seconds * 1000));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function get(url) {
|
|
|
|
@@ -36,7 +28,6 @@ async function get(url) {
|
|
|
|
|
await tryRequest();
|
|
|
|
|
}
|
|
|
|
|
})();
|
|
|
|
|
|
|
|
|
|
if (!res.ok) {
|
|
|
|
|
throw new Error(`${res.url} ${res.status} ${res.statusText} ${await res.text()}`);
|
|
|
|
|
}
|
|
|
|
@@ -68,9 +59,51 @@ async function archiveArtwork(id, index) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
(async function archiveBookmarks() {
|
|
|
|
|
(async function main() {
|
|
|
|
|
var lastartwork = {
|
|
|
|
|
id: undefined,
|
|
|
|
|
index: -1
|
|
|
|
|
};
|
|
|
|
|
try {
|
|
|
|
|
var files = fs.readdirSync("collection");
|
|
|
|
|
} catch (e) {
|
|
|
|
|
if (e.code == "ENOENT") {
|
|
|
|
|
fs.mkdirSync("collection");
|
|
|
|
|
var files = [];
|
|
|
|
|
} else throw e;
|
|
|
|
|
}
|
|
|
|
|
for (let file of files) {
|
|
|
|
|
let match = file.match(/^(\d{5})_(\d+)/);
|
|
|
|
|
if (!match) continue;
|
|
|
|
|
let prefix = match[1], index = Number(prefix), id = Number(match[2])
|
|
|
|
|
// find last saved artwork
|
|
|
|
|
if (index > lastartwork.index) {
|
|
|
|
|
lastartwork.index = index;
|
|
|
|
|
lastartwork.id = id;
|
|
|
|
|
}
|
|
|
|
|
// fetch missing images
|
|
|
|
|
if (file.endsWith(".json")) {
|
|
|
|
|
let illust = JSON.parse(fs.readFileSync(`collection/${file}`, "utf8"));
|
|
|
|
|
for (let i = 0; i < illust.pageCount; i++) {
|
|
|
|
|
let img_url = illust.urls.original.replace('p0', 'p'+i);
|
|
|
|
|
let img_filename = img_url.split('/').pop();
|
|
|
|
|
let img_local_filename = `${prefix}_${img_filename}`;
|
|
|
|
|
if (!files.includes(img_local_filename)) {
|
|
|
|
|
console.log(`missing ${img_local_filename}`);
|
|
|
|
|
try {
|
|
|
|
|
let res = await get(img_url);
|
|
|
|
|
let buffer = Buffer.from(await res.arrayBuffer());
|
|
|
|
|
fs.writeFileSync(`collection/${img_local_filename}`, buffer, {flag: "wx"});
|
|
|
|
|
} catch(error) {
|
|
|
|
|
console.error(error.stack);
|
|
|
|
|
fs.writeFileSync(`collection/${img_local_filename}_error.txt`, error.stack, {flag: "wx"});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
console.debug("lastartwork", lastartwork);
|
|
|
|
|
var newIds = [];
|
|
|
|
|
|
|
|
|
|
var offset = 0;
|
|
|
|
|
l1: while (true) {
|
|
|
|
|
let data = await get(`https://www.pixiv.net/ajax/user/${UserID}/illusts/bookmarks?tag=&offset=${offset}&limit=100&rest=show&lang=en&version=5dc84ab282403a049abea4e2f2214b6a69d31da6`)
|
|
|
|
@@ -84,19 +117,12 @@ async function archiveArtwork(id, index) {
|
|
|
|
|
if (!artworkIds.length) break;
|
|
|
|
|
offset += artworkIds.length;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
newIds = newIds.reverse();
|
|
|
|
|
console.log("archiving", newIds.length);
|
|
|
|
|
for (let id of newIds) {
|
|
|
|
|
await archiveArtwork(id, lastartwork.index + 1);
|
|
|
|
|
lastartwork.id = id;
|
|
|
|
|
lastartwork.index++;
|
|
|
|
|
fs.writeFileSync("lastartwork.json", JSON.stringify(lastartwork));
|
|
|
|
|
await sleep(1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
})();
|
|
|
|
|
|
|
|
|
|
async function sleep(seconds) {
|
|
|
|
|
await new Promise(resolve => setTimeout(resolve, seconds * 1000));
|
|
|
|
|
}
|