mirror of
https://gitlab.silvrtree.co.uk/martind2000/old-silvrgit.git
synced 2025-01-10 22:05:07 +00:00
Added event scraping
This commit is contained in:
parent
d9e8f91fac
commit
6af81e1885
72
lib/events.js
Normal file
72
lib/events.js
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
var http = require('http'), request = require('request'), cheerio = require('cheerio');
|
||||||
|
|
||||||
|
var eventCache = {
|
||||||
|
last: 0,
|
||||||
|
data: {},
|
||||||
|
expire: ((60 * 60) * 12) * 1000
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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 );
|
||||||
|
|
||||||
|
});
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
console.log('Using event cache...');
|
||||||
|
|
||||||
|
res.render('pages/events',eventCache );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
@ -2,12 +2,16 @@
|
|||||||
"name": "silvrtree",
|
"name": "silvrtree",
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"cheerio": "^0.19.0",
|
||||||
|
"ejs": "^2.3.4",
|
||||||
"htmlparser": "^1.7.7",
|
"htmlparser": "^1.7.7",
|
||||||
"mammoth": "^0.3.25-pre.1",
|
"mammoth": "^0.3.25-pre.1",
|
||||||
|
"request": "^2.67.0",
|
||||||
"wordsoap": "^0.2.0"
|
"wordsoap": "^0.2.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"express": "3.x",
|
"express": "3.x",
|
||||||
|
"scrape": "^0.2.3",
|
||||||
"unstyler": "^0.2.2"
|
"unstyler": "^0.2.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
57
scrapetest.js
Normal file
57
scrapetest.js
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
var request = require('request');
|
||||||
|
var cheerio = require('cheerio');
|
||||||
|
|
||||||
|
var url = 'https://www.list.co.uk/events/days-out/when:this%20weekend/location:Dumbarton(55.9460,-4.5556)/distance:20/';
|
||||||
|
|
||||||
|
|
||||||
|
var j=[];
|
||||||
|
|
||||||
|
|
||||||
|
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');
|
||||||
|
console.log('+++');
|
||||||
|
// console.log($(this).html());
|
||||||
|
console.log('###');
|
||||||
|
console.log(description.text());
|
||||||
|
console.log(link);
|
||||||
|
console.log('---');
|
||||||
|
|
||||||
|
item.title = title.text();
|
||||||
|
item.description = description.text();
|
||||||
|
item.link = link;
|
||||||
|
item.price = price.text();
|
||||||
|
item.date = dt;
|
||||||
|
|
||||||
|
j.push(item);
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(j);
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
https://www.list.co.uk/event/351218-pollock-parkrun/
|
||||||
|
|
||||||
|
<div class="eventSummary clearfix noImage">
|
||||||
|
<a href="/event/351218-pollock-parkrun/">
|
||||||
|
<h2 class="head">Pollock parkrun</h2>
|
||||||
|
</a>
|
||||||
|
<p>An informal weekly 5k run in Pollok Country Park. Everyone is welcome, no matter how fast or slow (you're welcome to walk the route, bring your dog or push a buggy), so you can use it as a one-off fitness test, a chance to get some fresh air or come every week to try to beat your personal best time. It's friendly and…</p>
|
||||||
|
</div>*/
|
25
views/pages/events.ejs
Normal file
25
views/pages/events.ejs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<% include ../partials/head %>
|
||||||
|
|
||||||
|
<div class="mui-container">
|
||||||
|
<div class="mui-panel">
|
||||||
|
<div class="mui-text-headline mui-text-accent">Events</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="container" class="mui-panel">
|
||||||
|
|
||||||
|
<%
|
||||||
|
for (var i = 0; i < data.length; i++) { %>
|
||||||
|
<div class="mui-row">
|
||||||
|
<div><a href='<%= data[i].link %>'> <%= data[i].title %> </a></div>
|
||||||
|
<p><%= data[i].description %></p>
|
||||||
|
<p><%= data[i].date %></p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<% } %>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<% include ../partials/footer %>
|
3
views/partials/footer.ejs
Normal file
3
views/partials/footer.ejs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
57
views/partials/head.ejs
Normal file
57
views/partials/head.ejs
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
|
||||||
|
<meta name="viewport" content="width=360; initial-scale=1;">
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Events</title>
|
||||||
|
|
||||||
|
<meta name="Author" content="" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/mui.css">
|
||||||
|
<style>
|
||||||
|
ul {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
display: inline;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 4px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dates {
|
||||||
|
padding: 2px;
|
||||||
|
border: solid 1px #80007e;
|
||||||
|
background-color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#btc, #fx {
|
||||||
|
font-size: 75%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.up, .ontime {
|
||||||
|
color: darkgreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
.down, .delayed {
|
||||||
|
color: darkred;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nochange {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.password {
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
background-color: #efefef;
|
||||||
|
font-family: monospace;
|
||||||
|
white-space: pre;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<script src="//cdnjs.cloudflare.com/ajax/libs/zepto/1.1.4/zepto.min.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
@ -1,6 +1,6 @@
|
|||||||
var express = require('express'), path = require('path'), http = require('http'),
|
var express = require('express'), path = require('path'), http = require('http'),
|
||||||
fx = require('./lib/fx'), btc = require('./lib/btc'), train = require('./lib/train'),
|
fx = require('./lib/fx'), btc = require('./lib/btc'), train = require('./lib/train'),
|
||||||
password = require('./lib/password') , clean = require('./lib/clean')
|
password = require('./lib/password') , clean = require('./lib/clean'), events = require('./lib/events')
|
||||||
//train = require('lib/train')
|
//train = require('lib/train')
|
||||||
/* ,submit = require('./routes/mongo/submit') */
|
/* ,submit = require('./routes/mongo/submit') */
|
||||||
;
|
;
|
||||||
@ -10,6 +10,7 @@ var btcCache = {}, fxCache = {} , trainCache = {};
|
|||||||
|
|
||||||
app.configure(function () {
|
app.configure(function () {
|
||||||
app.set('port', process.env.PORT || 4545);
|
app.set('port', process.env.PORT || 4545);
|
||||||
|
app.set('view engine', 'ejs');
|
||||||
app.use(express.logger('dev'));
|
app.use(express.logger('dev'));
|
||||||
app.use(express.cookieParser());
|
app.use(express.cookieParser());
|
||||||
app.use(express.session({secret: '1234567890QWERTY'}));
|
app.use(express.session({secret: '1234567890QWERTY'}));
|
||||||
@ -40,6 +41,10 @@ app.configure(function () {
|
|||||||
|
|
||||||
app.use('/cleanit', clean.cleanit);
|
app.use('/cleanit', clean.cleanit);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
app.use('/events', events.getEvents);
|
||||||
|
|
||||||
app.use('/lot', function (req, res) {
|
app.use('/lot', function (req, res) {
|
||||||
var pg = require('pg');
|
var pg = require('pg');
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user