UNPKG

irish-lotto

Version:
186 lines (157 loc) 6.28 kB
'use strict'; 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 };