-
Notifications
You must be signed in to change notification settings - Fork 0
/
booru.js
92 lines (81 loc) · 2.48 KB
/
booru.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
const fs = require('fs');
const path = require('path');
const download = require('image-downloader');
const Booru = require('booru');
const yargs = require('yargs');
yargs.version('1.0.1');
yargs.command({
command: 'download',
describe: 'download an image',
builder: {
s: {
describe: 'What service to download from. ex: Konachan.net or Yande.re',
demandOption: true,
type: 'string'
},
t: {
describe: 'Tags to search for',
demandOption: true,
type: 'string'
},
n: {
describe: 'Number of images to download',
demandOption: true,
type: 'number'
},
r: {
describe: 'Grab images randomly',
demandOption: false,
type: 'boolean'
},
R: {
describe: 'Allow search for NSFW content',
demandOption: false,
type: 'boolean'
}
},
handler(argv) {
const service = argv.s;
const tags = [argv.t];
const searchOptions = {
limit: argv.n,
nsfw: argv.R,
random: argv.r
}
BooruDownloader(service, tags, searchOptions);
}
});
const BooruDownloader = async (service, tags, searchOptions) => {
const imageFolder = `${__dirname}/${tags[0]}`;
const posts = await Booru.search(service, tags, searchOptions);
//If Folder doesn't exist create one
if (!fs.existsSync(imageFolder)) {
fs.mkdir(imageFolder, {}, err => {
if (err) throw err;
console.log(`${tags[0]} Folder Created\n`)
});
}
const requestsLimit= 5;
let i = 0;
for (const post of posts) {
if (i % requestsLimit == 0 && i!=0) StallDownloader();
const image = GetImageURL(post.fileUrl);
const imagePath = (`${imageFolder}/${image}`);
//If File already exists dont do anything
if (fs.existsSync(imagePath)) {
console.log(`SKIPPED: ${imagePath} ALREADY EXISTS`);
continue;
}
try {
await download.image({url: post.fileUrl, dest: imageFolder});
console.log(`DOWNLOADED: ${post.fileUrl}`);
} catch (err) {
console.error(err);
}
i++;
}
console.log(`\nFinished Downloading`);
}
const GetImageURL = url => url.split("/").slice(5).join("/");
const StallDownloader = () => setTimeout(() => console.log('\n'), 500);
yargs.parse();