-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathvideotable.js
48 lines (41 loc) · 1.26 KB
/
videotable.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
const csvParser = require('csv-parse'),
csvStringify = require('csv-stringify'),
fs = require('fs');
const DATA_FILE = process.env.VIDEO_FILE,
COLUMNS = ['id', 'viewCount', 'duration', 'uploaded', 'fetched', 'query'];
if (!DATA_FILE) {
throw "no video file";
}
function readVideos(cb) {
var videos = [];
var parser = csvParser({columns: COLUMNS})
parser.on('readable', () => {
let record;
while (record = parser.read()) {
record['viewCount'] = parseInt(record['viewCount']);
record['duration'] = parseInt(record['duration']);
delete record['']; // what is this thing?
videos.push(record);
}
});
parser.on('error', (err) => console.error(err.message));
parser.on('end', () => cb(videos));
fs.createReadStream(DATA_FILE).pipe(parser);
}
// expects [{id, viewCount, duration, uploaded, fetched}, ]
function writeVideos(videos) {
var csvWriter = csvStringify({columns: COLUMNS});
csvWriter.on('error', (err) => {
console.error(err.message);
});
csvWriter.pipe(fs.createWriteStream(DATA_FILE));
videos.forEach(function(video) {
csvWriter.write(video);
});
csvWriter.end();
}
exports.readVideos = readVideos;
exports.writeVideos = writeVideos;
exports.filename = function() {
return DATA_FILE;
};