today/lib/trains.js
Martin Donnelly c0d3b15694 init
2017-10-26 10:46:54 +01:00

123 lines
3.5 KiB
JavaScript

/**
* Created by Martin on 31/03/2016.
*/
const STRING = require('string');
const logger = require('log4js').getLogger('trains');
const request = require('request'), cheerio = require('cheerio');
const _ = require('lodash');
const trainList = [
{
'id': 'dbeglq',
'url': 'http://www.journeycheck.com/scotrail/route?from=DBE&to=GLQ&action=search&savedRoute='
},
{
'id': 'glqhym',
'url': 'http://www.journeycheck.com/scotrail/route?from=GLQ&to=HYM&action=search&savedRoute='
}
];
module.exports = {
'processTrainUpdates': function (body) {
const outputArray = [];
const $ = cheerio.load(body);
const lu = $('DIV#LU').first();
const us = lu.find('.updatesSection').first();
us.find('.updateTitle').each(function (div) {
const wO = { 'title': '', 'description': '' };
title = $(this).find('A').first().text().trim();
wO.title = title;
outputArray.push(wO);
});
us.find('.updateBodyStart').each(function (div) {
let description = $(this).find('.bodyInner').first().find('.primaryStyle').first().text().trim();
const splitDesc = description.split('\r\n');
const wa = [];
for (let i = 0; i < splitDesc.length; i++) {
let contentCheck = splitDesc[i].trim();
if (contentCheck.indexOf('Impact') > -1) contentCheck = '';
if (contentCheck.indexOf('Additional Information') > -1) contentCheck = '';
if (contentCheck.indexOf('apologise for the delay') > -1) contentCheck = '';
if (contentCheck.indexOf('Delay Repay') > -1) contentCheck = '';
if (contentCheck.length > 0) wa.push(contentCheck);
}
description = wa.join(' ');
outputArray[div].description = description;
});
return outputArray;
}, 'getTrainUpdates': function (id, out) {
return new Promise(function (resolve, reject) {
'use strict';
logger.info('Getting train events: ', id);
const url = trainList[id].url;
const now = new Date();
// if ((now - eventCache.last) > eventCache.expire) {
request(url, function (err, resp, body) {
if (err)
// logger.error(err);
return reject(err);
// throw err;
let trainData = module.exports.processTrainUpdates(body);
for (let i = 0; i < out.length; i++) {
let flag = false;
for (let j = 0; j < trainData.length; j++)
flag = _.isEqual(trainData[j], out[i]);
if (!flag)
trainData.push(out[i]);
}
trainData = _.uniq(trainData);
return resolve(trainData);
}, function (error, response, body) {
if (response.statusCode !== 200) {
logger.error(response.statusCode);
logger.error(body);
}
if (error)
// logger.error(err);
return reject(err);
// throw err;
});
});
}, 'updateTrains': function () {
logger.info('New Updating trains..');
const output = [];
return new Promise(function (resolve, reject) {
'use strict';
module.exports.getTrainUpdates(0, [])
.then((d) => {
'use strict';
module.exports.getTrainUpdates(1, d)
.then((d) => {
'use strict';
return resolve(d);
})
.catch((e) => {
'use strict';
return reject(e);
});
})
.catch((e) => {
'use strict';
return reject(e);
});
});
}
};