silvrgit/lib/events.js

146 lines
4.8 KiB
JavaScript
Raw Normal View History

2016-03-08 21:52:21 +00:00
var http = require('http'), request = require('request'), cheerio = require('cheerio');
var eventTimer = 0;
var eventCache = {
last: 0,
data: {},
expire: ((60 * 1000) * 60) * 12,
cinema: {}
};
// 'cwr':{data: {}, last:0};
var cinemas = [{id: 'cwr', url: 'https://film.list.co.uk/cinema/14982-cineworld-renfrew-street/'},
{id: 'gsc', url: 'https://film.list.co.uk/cinema/13590-cineworld-glasgow-science-centre/'},
{id: 'pho', url: 'https://film.list.co.uk/cinema/12500-showcase-cinema-paisley/'}];
module.exports = {
getEvents: function (req, res) {
console.log('Getting events...');
var j = [], url = 'https://www.list.co.uk/events/days-out/when:this%20weekend/location:Dumbarton(55.9460,-4.5556)/distance:20/';
var now = new Date();
if ((now - eventCache.last) > eventCache.expire) {
request(url, function (err, resp, body) {
if (err)
throw err;
$ = cheerio.load(body);
// console.log($);
// TODO: scraping goes here!
$('.resultsRow').each(function (div) {
var item = {};
var eventSummary = $(this).find('.eventSummary').first();
var byDate = $(this).find('.byDate').first();
var title = eventSummary.find('.head').first();
var description = eventSummary.find('P').first();
var link = ' https://www.list.co.uk' + eventSummary.find('A').first().attr('href');
var price = byDate.find('.price').first();
var dt = byDate.find('.dtstart').first().attr('title');
item.title = title.text();
item.description = description.text();
item.link = link;
item.price = price.text();
item.date = dt;
j.push(item);
});
eventCache.last = now;
eventCache.data = j;
res.render('pages/events', eventCache);
2016-03-23 16:04:45 +00:00
}, function(error, response, body) {
if(response.statusCode !== 200) {
logger.error(response.statusCode);
logger.error(body);
}
});
2016-03-08 21:52:21 +00:00
} else {
console.log('Using event cache...');
res.render('pages/events', eventCache);
}
},
doGetCinema: function (id) {
var cinemaID = cinemas[id].id;
var url = cinemas[id].url;
var thisCinema = eventCache[cinemaID] || {data: {}, last: 0};
console.log(cinemaID);
console.log(url);
var j = [];
var now = new Date();
if ((now - thisCinema.last) > eventCache.expire) {
request(url, function (err, resp, body) {
console.log('Working');
if (err)
throw err;
$ = cheerio.load(body);
$('.byEvent').each(function (div) {
var item = {};
var title = $(this).find('H4').first();
var eventSummary = $(this).find('.eventSummary').first();
var description = eventSummary.find('P').first();
var link = ' https://www.list.co.uk' + eventSummary.find('A').first().attr('href');
item.title = title.text();
item.description = description.text();
item.link = link;
j.push(item);
});
thisCinema.last = now;
thisCinema.data = j;
eventCache[cinemaID] = thisCinema;
console.log('returning');
return thisCinema;
2016-03-23 16:04:45 +00:00
}, function(error, response, body) {
if(response.statusCode !== 200) {
console.error(response.statusCode);
console.error(body);
}
});
2016-03-08 21:52:21 +00:00
} else {
console.log('Using event cache...');
return thisCinema;
}
},
getCinema: function (req, res) {
var id = parseInt(req.params.id);
console.log('Getting cinema: ' +id);
var output = module.exports.doGetCinema(id);
res.render('pages/cinema', output);
},
preLoad: function () {
var output = module.exports.doGetCinema(0);
output = module.exports.doGetCinema(1);
output = module.exports.doGetCinema(2);
setTimeout(function () {
module.exports.preLoad();
}, eventCache.expire);
}
};
setTimeout(function () {
console.log('Pre loading cinemas...');
module.exports.preLoad();
}, 10000);