You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
4.5 KiB
170 lines
4.5 KiB
'use strict'
|
|
|
|
var downloader = require('./downloader.js');
|
|
var IO = require('./io.js');
|
|
var NOAA = require('./noaa.js');
|
|
|
|
module.exports = {
|
|
//=========================
|
|
// Read-only vars
|
|
//=========================
|
|
dirs: {
|
|
txt: 'data/meteo/txt/',
|
|
json: 'data/meteo/json/'
|
|
},
|
|
|
|
months: [null, 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
|
|
|
|
years: {
|
|
start: 1982,
|
|
end: 2015
|
|
},
|
|
|
|
//==========================
|
|
// Downloads
|
|
//==========================
|
|
/**
|
|
*
|
|
*/
|
|
getYear: function(station, year) {
|
|
var path = module.exports.dirs.txt + station + '/';
|
|
var filename = station + 'h' + year + '.txt';
|
|
|
|
var url = 'http://www.ndbc.noaa.gov/view_text_file.php?'+
|
|
'filename=' + filename + '.gz&dir=data/historical/stdmet/';
|
|
|
|
downloader.mkdir(path);
|
|
return downloader.download(url, path + filename);
|
|
},
|
|
|
|
/**
|
|
*
|
|
*/
|
|
getMonth: function(station, month, year) {
|
|
var path = module.exports.dirs.txt + station + '/';
|
|
var filename = station + month.toString(16) + year + '.txt';
|
|
|
|
var url = 'http://www.ndbc.noaa.gov/view_text_file.php?' +
|
|
'filename=' + filename + '.gz&dir=data/stdmet/' + module.exports.months[month] + '/';
|
|
|
|
downloader.mkdir(path);
|
|
return downloader.download(url, path + filename);
|
|
},
|
|
|
|
/**
|
|
*
|
|
*/
|
|
getNewest: function(station, month, year) {
|
|
var path = module.exports.dirs.txt + station + '/';
|
|
var filename = station + month.toString(16) + year + '-newest.txt';
|
|
|
|
var url = 'http://www.ndbc.noaa.gov/data/stdmet/' + module.exports.months[month] + '/' + station + '.txt';
|
|
|
|
downloader.mkdir(path);
|
|
return downloader.download(url, path + filename);
|
|
},
|
|
|
|
/**
|
|
*
|
|
*/
|
|
getCurrent: function(station) {
|
|
var filename = station + '.txt';
|
|
|
|
var url = 'http://www.ndbc.noaa.gov/data/realtime2/' + filename;
|
|
|
|
return downloader.download(url, dir + filename);
|
|
},
|
|
|
|
//==========================
|
|
// Transformations
|
|
//==========================
|
|
|
|
/**
|
|
*
|
|
*/
|
|
parseAllMonths: function(station, year) {
|
|
var arr = [];
|
|
var txtPath = module.exports.dirs.txt + station + '/';
|
|
var jsonPath = module.exports.dirs.json + '/';
|
|
|
|
for (var month = 1; month <= 12; month++) {
|
|
arr.push(IO.read(txtPath + station + month.toString(16) + year + '-newest.txt').then(NOAA.parseTxt));
|
|
arr.push(IO.read(txtPath + station + month.toString(16) + year + '.txt').then(NOAA.parseTxt));
|
|
}
|
|
|
|
return Promise.all(arr)
|
|
.then(NOAA.aggregate)
|
|
.then(NOAA.convert)
|
|
.then(function(str) {
|
|
return IO.write(jsonPath + station + '-' + year + '.json', str);
|
|
});
|
|
},
|
|
|
|
/**
|
|
*
|
|
*/
|
|
parseYear: function(station, year) {
|
|
var txtPath = module.exports.dirs.txt + station + '/';
|
|
var jsonPath = module.exports.dirs.json + '/';
|
|
|
|
return IO.read(txtPath + station + 'h' + year + '.txt')
|
|
.then(NOAA.parseTxt)
|
|
.then(NOAA.convert)
|
|
.then(function(str) {
|
|
return IO.write(jsonPath + station + '-' + year + '.json', str);
|
|
});
|
|
},
|
|
|
|
//========================================
|
|
// Promise Collections used in loops
|
|
//========================================
|
|
|
|
/**
|
|
*
|
|
*/
|
|
getAllYears: function(station, startYear, endYear) {
|
|
var arr = [];
|
|
for (var year = startYear; year <= endYear; year++) {
|
|
arr.push(module.exports.getYear(station, year));
|
|
}
|
|
|
|
return Promise.all(arr);
|
|
},
|
|
|
|
/**
|
|
*
|
|
*/
|
|
getAllMonths: function(station, year) {
|
|
var arr = [];
|
|
for (var month = 1; month <= 12; month++) {
|
|
arr.push(module.exports.getMonth(station, month, year));
|
|
}
|
|
|
|
return Promise.all(arr);
|
|
},
|
|
|
|
/**
|
|
*
|
|
*/
|
|
getAllNewest: function(station, year) {
|
|
var arr = [];
|
|
for (var month = 1; month <= 12; month++) {
|
|
arr.push(module.exports.getNewest(station, month, year));
|
|
}
|
|
|
|
return Promise.all(arr);
|
|
},
|
|
|
|
/**
|
|
*
|
|
*/
|
|
parseAllYears: function(station, startYear, endYear) {
|
|
var arr = [];
|
|
|
|
for (var year = startYear; year <= endYear; year++) {
|
|
arr.push(module.exports.parseYear(station, year));
|
|
}
|
|
|
|
return Promise.all(arr);
|
|
}
|
|
};
|
|
|