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.
 
 
 
 

165 lines
4.4 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'],
//==========================
// 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);
}
};