From 7ab2a42348fb24a28ccdf8a2863715bc4c3f8997 Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Sun, 25 Jun 2017 01:23:49 -0600 Subject: [PATCH] Add API route to get Protospace class list --- package.json | 4 +++- server.js | 24 +++++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 50df353..8f94a4f 100644 --- a/package.json +++ b/package.json @@ -18,8 +18,10 @@ "webpack-dev-server": "^2.4.5" }, "dependencies": { + "cheerio": "^1.0.0-rc.1", "express": "^4.15.3", "react": "^15.6.1", - "react-dom": "^15.6.1" + "react-dom": "^15.6.1", + "request": "^2.81.0" } } diff --git a/server.js b/server.js index 37d3987..61edfdf 100644 --- a/server.js +++ b/server.js @@ -1,12 +1,34 @@ +const request = require('request'); +const cheerio = require('cheerio'); const express = require('express') const app = express() app.use('/', express.static('dist')) -app.get('/hello', function (req, res) { +app.get('/hello', (req, res) => { res.send('Hello World!') }) +app.get('/api/data/classes', (req, res) => { + request('https://my.protospace.ca/school', (error, response, html) => { + if (!error && response.statusCode == 200) { + const $ = cheerio.load(html); + let classes = []; + + $('table.grid tbody tr').each((i, elem) => { + classes[i] = { + subject: $(elem).children().eq(0).text(), + date: $(elem).children().eq(2).text(), + available: $(elem).children().eq(6).text() + } + }); + + res.setHeader('Content-Type', 'application/json'); + res.send(classes); + } + }); +}) + app.listen(3000, function () { console.log('Example app listening on port 3000!') })