-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathupdate_comets_and_planets.js
More file actions
executable file
·98 lines (82 loc) · 2.65 KB
/
update_comets_and_planets.js
File metadata and controls
executable file
·98 lines (82 loc) · 2.65 KB
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
93
94
95
96
97
98
#!/usr/bin/env node
var request = require("request"),
fs = require("fs");
var argv = require('minimist')(process.argv.slice(2));
function planets() {
request("http://ssd.jpl.nasa.gov/txt/p_elem_t1.txt", function(err, resp, body) {
// remove all the intro info
body = body.split(/\-{3,200}\n/)[1];
var fields = ["name", "a", "e", "I", "L", "w", "node"];
var planets = {},
name;
body.split(/\n/).forEach(function(line, l) {
var planet = {};
line.split(/\s{2,100}/).forEach(function(datum, d) {
planet[fields[d]] = d === 0? datum : parseFloat(datum);
if (d > 0) {
planet[fields[d] + "_Cy"] = null;
}
});
if (planet.name == "EM Bary") {
planet.name = "Earth";
}
// This is the /Cy field after each planet
if (planet.name == "" && (argv.pluto || name !== "Pluto")) {
for (var field in planet) {
if (planet.hasOwnProperty(field)) {
if (field == "name") {
continue;
}
field_cy = field + "_Cy";
if (planet.hasOwnProperty(field_cy)) {
planets[name][field_cy] = planet[field];
}
}
}
} else {
name = planet.name;
}
if (planet.name !== "" && Object.keys(planet).length > 1 && (argv.pluto || name !== "Pluto")) {
planets[planet.name] = planet;
}
});
console.log("Found info for " + Object.keys(planets).length + " planets.");
fs.writeFileSync(__dirname + "/data/planets.json", JSON.stringify(planets, null, 2));
});
}
function comets() {
var comets = [];
request("http://ssd.jpl.nasa.gov/dat/ELEMENTS.COMET", function(err, resp, body) {
var lines = body.split(/\n/);
var headers = [ 'epoch', 'q', 'e', 'I', 'w', 'node', 'Tp', 'Ref' ];
lines.shift(); // burn headers
lines.forEach(function(line, l) {
var comet = {};
line = line.replace("JPL ", "JPL_");
var name = line.match(/^\s*(.*?)\s{3,100}/);
if (name) {
comet.name = name[1];
line = line.replace(/^\s*.*?\s{3,100}/, "");
line.split(/\s+/).forEach(function(datum,f) {
if (datum.replace(/\d+/, "") == "") {
comet[headers[f]] = parseInt(datum, 10);
} else if (datum.replace(/[0-9\.]+/, "") == "") {
comet[headers[f]] = parseFloat(datum, 10);
} else {
comet[headers[f]] = datum;
}
});
comets.push(comet);
}
});
console.log("Found info for " + comets.length + " comets.");
fs.writeFileSync(__dirname + "/data/comets.json", JSON.stringify(comets, null, 2));
});
}
if (argv._.length == 0) {
console.log("You should supply either 'planets' or 'comets' as an argument.");
} else if (argv._[0] == "comet" || argv._[0] == "comets") {
comets();
} else if (argv._[0] == "planet" || argv._[0] == "planets") {
planets();
}