-
Notifications
You must be signed in to change notification settings - Fork 1
/
pinteresting.js
74 lines (70 loc) · 1.93 KB
/
pinteresting.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
const PDK = require('node-pinterest');
const fs = require('fs');
const https = require('https');
let mkdirp = require('mkdirp');
let pinterest = PDK.init('YOUR_TOKEN_HERE');
let board = `${process.argv[2]}`; //'username/board'
let dir = `./${board}/`;
mkdirp(dir, (err) => {
if (err) console.error(err);
else console.log(`dir ${dir} created`);
});
let links = [];
let pinsLink = `https://api.pinterest.com/v1/boards/${board}/pins/`;
const writeFile = (links) =>
fs.writeFile('links', links.join('\n'), (err) => {
if (err) {
return console.log(err);
}
console.log('The links file was saved!');
});
const download = (url, dest, cb) => {
let file = fs.createWriteStream(dest);
let request = https.get(url, (response) => {
response.pipe(file);
file.on('finish', () => {
file.close();
cb();
});
});
};
const promiseWhile = (data, condition, action) => {
let whilst = (data) => {
return condition(data) ? action(data).then(whilst) : Promise.resolve(data);
};
return whilst(data);
};
const getImageLink = (data) => data.data.map((data) => data.image.original.url);
const getImages = (link) =>
new Promise((resolve, reject) => {
let options = {
qs: {
fields: 'image',
limit: 100,
},
};
let reg = RegExp(/^[^&]+/g);
let parsedLink = reg.exec(link);
pinterest.api(parsedLink[0], options).then((data) => {
links.push(getImageLink(data));
promiseWhile(
data.page.next,
(data) => typeof data === 'string',
getImages
).then(() => resolve());
});
});
let i = 0;
// let nameReg = RegExp(/(?:[^/][\d\w\.]+)$(?<=(?:.jpg)|(?:.png)|(?:.gif)|(?:.jpeg))/g)
getImages(pinsLink).then(() =>
require('async').eachLimit(
links.reduce((acc, e) => acc.concat(e), []),
5,
(url, next) => {
download(url, `./${board}/${i++}.${url.slice(-3)}`, next);
},
() => {
console.log('Download finished');
}
)
);