'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); } };