-
Notifications
You must be signed in to change notification settings - Fork 0
/
doc2json
executable file
·86 lines (67 loc) · 2.83 KB
/
doc2json
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
#!/usr/bin/env node
var Miso = require("miso.dataset");
var csv = require("csv");
var request = require('request');
var cli = require('cli');
var fs = require('fs');
var util = require('util');
// test key: 0Akse3y5kCOR8dEh6cWRYWDVlWmN0TEdfRkZ3dkkzdGc
var DOC = 'https://docs.google.com/spreadsheet/pub?hl=en_US&hl=en_US&key=%s&single=true&gid=%d&output=csv';
cli.parse({
key: ['k', 'Google docs key', 'string'],
sheet: ['s', 'Sheet nr', 'number', 0],
output: ['o', 'Output file name', 'path', __dirname+'/output.json']
});
cli.main(function(args, options) {
if(options.key){
var url = util.format(DOC, options.key, options.sheet);
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
var csvString = body;
var parser = csv();
var records = [];
parser.on("error", function(error){
console.log(error);
});
parser.on("record", function(row, index){
records.push(row);
});
parser.on("end", function(){
var ds = new Miso.Dataset({
data: records
});
ds.fetch({
error: function (error) {
console.log(error);
},
success: function () {
var rows = [];
var i = 1;
this.each(function(row) {
row._id = i;
rows.push(row);
i++;
});
fs.writeFile(options.output, JSON.stringify(rows), function(err) {
if(err) {
console.log(err);
}
});
}
});
});
// Tell the parser to return rows as objects keyed by column names.
parser.from.options({
columns: true
});
// Start parsing. This package will not throw errors for duplicate header rows
// or other similar issues that will stop Miso.Dataset in its tracks.
parser.from(csvString);
}else{
console.log("Error! response code: ", response.statusCode);
}
});
}else{
console.log("You need to provide a valid key");
}
});