/** * 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) * 1) * 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);