forked from pat-flew/har-downloader
-
Notifications
You must be signed in to change notification settings - Fork 0
/
har-downloader.js
58 lines (53 loc) · 1.46 KB
/
har-downloader.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
var Fs = require('fs');
var Url = require('url');
var Promise = require('bluebird');
var Mkdirp = require('mkdirp');
var Http = require('http');
const REGEX = /\"url": \"([^\"]*)/g;
var harFile = process.argv[2];
var destination = process.argv[3];
getFiles().then(function(files) {
files = files.filter(function(v, i, a) { return a.indexOf(v) == i });
return Promise.each(files, function(file, i) {
console.log((i+1) + '/' + files.length + ' - Downloading: ' + file);
return downloadFile(file);
});
});
function getFiles() {
return new Promise(function(resolve, reject) {
Fs.readFile(harFile, function(err, data) {
var capture = data.toString();
var files = [];
while (match = REGEX.exec(capture)) {
files.push(match[1]);
}
resolve(files);
});
});
}
function downloadFile(url, base) {
return new Promise(function(resolve, reject) {
var paths = Url.parse(url).pathname.split('/');
var filename = Url.parse(paths.pop()).pathname;
paths = paths.join('/');
Mkdirp(destination + '/' + paths, function(err) {
file = Fs.createWriteStream(destination + '/' + paths + '/' + filename);
Http.get({
host: Url.parse(url).host,
path: Url.parse(url).pathname,
post: 80,
}, function(res) {
res.on('data', function(data) {
file.write(data);
}).on('end', function() {
file.end();
resolve();
}).on('error', function() {
console.warn('** ERROR');
file.end();
reject();
});
});
});
})
}