irish-lotto
Version:
Get Irish lotto numbers in JSON
186 lines (157 loc) • 6.28 kB
JavaScript
;
var _superagent = require('superagent');
var request = _interopRequireWildcard(_superagent);
var _xml2js = require('xml2js');
var _lodash = require('lodash');
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
var URL = 'http://resultsservice.lottery.ie/resultsservice.asmx';
var responseObject = { error: true };
var getProjectedJackpot = function getProjectedJackpot(drawType, cb) {
try {
if (typeof drawType !== 'string') {
responseObject.message = 'DrawType must be of type string.';
return cb(responseObject);
}
request.get(URL + '/GetProjectedJackpot').query({ drawType: drawType }).end(function (err, res) {
if (err || !res.ok) {
responseObject.message = res.text;
return cb(responseObject);
} else {
(0, _xml2js.parseString)(res.text, function (err, result) {
if (err) {
responseObject.message = 'Error parsing XML.';
return cb(responseObject);
} else {
var obj = {};
obj.amount = result.ProjectedJackpot.Amount.toString();
obj.drawDate = result.ProjectedJackpot.DrawDate.toString();
obj.guaranteed = result.ProjectedJackpot.Guaranteed.toString();
responseObject.error = false;
responseObject.response = obj;
}
return cb(responseObject);
});
}
});
} catch (e) {
responseObject.message = e;
return cb(responseObject);
}
};
// temp testing
// getProjectedJackpot('Lotto', (res) => {
// console.log(JSON.stringify(res, null, 2));
// });
var getResults = function getResults(drawType, lastNumberOfDraws, cb) {
try {
if (typeof drawType !== 'string') {
responseObject.message = 'DrawType must be of type string.';
return cb(responseObject);
}
if (typeof lastNumberOfDraws !== 'number') {
responseObject.message = 'LastNumberOfDraws must be of type number.';
return cb(responseObject);
}
request.get(URL + '/GetResults').query({ drawType: drawType, lastNumberOfDraws: lastNumberOfDraws }).end(function (err, res) {
if (err || !res.ok) {
responseObject.message = res.text;
return cb(responseObject);
} else {
(0, _xml2js.parseString)(res.text, function (err, result) {
if (err) {
responseObject.message = 'Error parsing XML.';
return cb(responseObject);
}
var results = result.ArrayOfDrawResult.DrawResult;
function recurse(arr) {
var res = (0, _lodash.map)(arr, function (item) {
return (0, _lodash.reduce)((0, _lodash.keys)(item), function (acc, key) {
if (key.toString() === 'Structure' || key.toString() === 'Numbers' || key.toString() === 'Tier' || key.toString() === 'DrawNumber' && item[key].length > 1) {
acc[key.toString().charAt(0).toLowerCase() + key.slice(1)] = recurse(item[key]);
} else {
acc[key.toString().charAt(0).toLowerCase() + key.slice(1)] = item[key].toString();
}
return acc;
}, {});
});
return res;
}
var responseResults = recurse(results);
if (responseResults[0] == null) {
responseObject.message = 'No data from remote.';
} else {
responseObject.error = false;
responseObject.response = responseResults;
}
return cb(responseObject);
});
}
});
} catch (e) {
responseObject.message = e;
return cb(responseObject);
}
};
// temp for testing only
// getResults('EuroMillionsPlus', 2, (res) => {
// console.log(JSON.stringify(res, null, 2));
// });
var getResultsForDate = function getResultsForDate(drawType, drawDate, cb) {
try {
if (typeof drawType !== 'string') {
responseObject.message = 'DrawType must be of type string.';
return cb(responseObject);
}
if (typeof drawDate !== 'string') {
responseObject.message = 'DrawDate must be of type string.';
return cb(responseObject);
}
request.get(URL + '/GetResultsForDate').query({ drawType: drawType, drawDate: drawDate }).end(function (err, res) {
if (err || !res.ok) {
responseObject.message = res.text;
return cb(responseObject);
} else {
(0, _xml2js.parseString)(res.text, function (err, result) {
if (err) {
responseObject.message = 'Error parsing XML.';
return cb(responseObject);
}
var results = result.ArrayOfDrawResult.DrawResult;
function recurse(arr) {
var res = (0, _lodash.map)(arr, function (item) {
return (0, _lodash.reduce)((0, _lodash.keys)(item), function (acc, key) {
if (key.toString() === 'Structure' || key.toString() === 'Numbers' || key.toString() === 'Tier' || key.toString() === 'DrawNumber' && item[key].length > 1) {
acc[key.toString().charAt(0).toLowerCase() + key.slice(1)] = recurse(item[key]);
} else {
acc[key.toString().charAt(0).toLowerCase() + key.slice(1)] = item[key].toString();
}
return acc;
}, {});
});
return res;
}
var responseResults = recurse(results);
if (responseResults[0] == null) {
responseObject.message = 'No data from remote.';
} else {
responseObject.error = false;
responseObject.response = responseResults;
}
return cb(responseObject);
});
}
});
} catch (e) {
responseObject.message = e;
return cb(responseObject);
}
};
// temp for testing only
// getResultsForDate('Lotto', '2016-10-12', (res) => {
// console.log(JSON.stringify(res, null, 2));
// });
module.exports = {
getProjectedJackpot: getProjectedJackpot,
getResults: getResults,
getResultsForDate: getResultsForDate
};