mirror of
https://gitlab.silvrtree.co.uk/martind2000/old-silvrgit.git
synced 2025-01-11 11:55:07 +00:00
138 lines
4.2 KiB
JavaScript
138 lines
4.2 KiB
JavaScript
/**
|
|
* Created by marti on 30/01/2016.
|
|
*/
|
|
var http = require('http'), request = require('request'), cheerio = require('cheerio'), Forecast = require('forecast.io'), util = require('util');
|
|
|
|
var todayCache = {
|
|
last: 0,
|
|
data: {
|
|
trains: {last: 0, data: []},
|
|
weather: {}
|
|
},
|
|
expire: ((60 * 1000) * 60) * 1
|
|
};
|
|
|
|
var trainList = [
|
|
{id: 'dbeglq', url: 'http://www.journeycheck.com/scotrail/route?from=DBE&to=GLQ&action=search&savedRoute='},
|
|
{id: 'glqdbe', url: 'http://www.journeycheck.com/scotrail/route?from=GLQ&to=DBE&action=search&savedRoute='}
|
|
];
|
|
|
|
//https://api.forecast.io/forecast/0657dc0d81c037cbc89ca88e383b6bbf/55.8582846,-4.2593033?units=uk2
|
|
var forecastOptions = {
|
|
APIKey: '0657dc0d81c037cbc89ca88e383b6bbf',
|
|
units: 'uk2'
|
|
};
|
|
|
|
module.exports = {
|
|
getToday: function (req, res) {
|
|
res.render('pages/today', todayCache);
|
|
},
|
|
|
|
getTrainUpdates: function (id) {
|
|
console.log('Getting train events...');
|
|
var url = trainList[id].url;
|
|
|
|
var now = new Date();
|
|
var outputArray = [];
|
|
// if ((now - eventCache.last) > eventCache.expire) {
|
|
request(url, function (err, resp, body) {
|
|
if (err)
|
|
throw err;
|
|
$ = cheerio.load(body);
|
|
var lu = $('DIV#LU').first();
|
|
|
|
var us = lu.find('.updatesSection').first();
|
|
us.find('.updateTitle').each(function (div) {
|
|
var wO = {title: '', description: ''};
|
|
title = $(this).find('A').first().text().trim();
|
|
wO.title = title;
|
|
outputArray.push(wO);
|
|
});
|
|
|
|
us.find('.updateBodyStart').each(function (div) {
|
|
|
|
var description = $(this).find('.bodyInner').first().find('.primaryStyle').first().text().trim();
|
|
var splitDesc = description.split('\r\n');
|
|
|
|
var wa = [];
|
|
for (var i = 0; i < splitDesc.length; i++) {
|
|
var 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;
|
|
});
|
|
|
|
// join arrays
|
|
|
|
for (var i = 0; i < outputArray.length; i++) {
|
|
todayCache.data.trains.data.push(outputArray[i])
|
|
}
|
|
|
|
});
|
|
|
|
todayCache.data.trains.last = now;
|
|
|
|
// todayCache.data.trains.data = j;
|
|
|
|
},
|
|
updateTrains: function () {
|
|
console.log('Updating trains..');
|
|
|
|
todayCache.data.trains.data= [];
|
|
|
|
module.exports.getTrainUpdates(0);
|
|
module.exports.getTrainUpdates(1);
|
|
|
|
},
|
|
|
|
doGetWeatherOutlook: function () {
|
|
console.log('Retrieving weather..');
|
|
var j = {};
|
|
var forecast = new Forecast(forecastOptions);
|
|
forecast.get(55.8582846, -4.2593033, {units: 'uk2'}, function (err, res, data) {
|
|
if (err) throw err;
|
|
|
|
j.currently = data.currently.summary;
|
|
j.today = data.daily.summary;
|
|
j.alerts = data.alerts || {};
|
|
|
|
todayCache.data.weather = j;
|
|
});
|
|
|
|
},
|
|
preLoadToday: function () {
|
|
try {
|
|
module.exports.doGetWeatherOutlook();
|
|
}
|
|
catch (e) {
|
|
// statements to handle any exceptions
|
|
console.log('ERROR:');
|
|
console.log(e);
|
|
}
|
|
|
|
try {
|
|
module.exports.updateTrains();
|
|
}
|
|
catch (e) {
|
|
// statements to handle any exceptions
|
|
console.log('ERROR:');
|
|
console.log(e);
|
|
}
|
|
|
|
setTimeout(function () {
|
|
module.exports.preLoadToday();
|
|
}, todayCache.expire);
|
|
}
|
|
}
|
|
;
|
|
|
|
setTimeout(function () {
|
|
// console.log('Pre loading trains...');
|
|
module.exports.preLoadToday();
|
|
|
|
}, 15000); |