-
Notifications
You must be signed in to change notification settings - Fork 0
/
bvg.js
53 lines (43 loc) · 1.3 KB
/
bvg.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
'use strict'
const {fetch} = require('fetch-ponyfill')({Promise: require('pinkie-promise')})
const cheerio = require('cheerio')
const url = require('url')
const _ = require('./helpers')
const lineInClass = /--(\w+)(\s|$)/
const fromClass = (c) => {
const s = c.match(lineInClass)
return s ? s[1].toUpperCase() : null
}
const disruptions = () =>
fetch(`https://www.bvg.de/de/Fahrinfo/Verkehrsmeldungen`)
.then((res) => res.text())
.then((body) => {
const $ = cheerio.load(body)
const columns = Array.from($('table.traffic-overview th'))
.map((e) => $(e).text())
const row = (e) =>
Array.from($('td', e))
.reduce((disruption, cell, i) => {
cell = $(cell)
let key = columns[i]
let value = cell.text()
if (key === 'Linie') {
key = 'lines'
value = _.line(value)
if (!value) value = // wat
fromClass(cell.children('.icon-t').first().attr('class'))
value = [value]
} else if (key === 'Gültig') {
key = 'when'
value = _.clean(value)
} else if (key === 'Ursache und Auswirkung') key = 'description'
else if (key === 'Bereich') {
key = 'where'
value = _.clean(value)
}
disruption[key] = value
return disruption
}, {})
return Array.from($('table.traffic-overview tbody tr')).map(row)
})
module.exports = disruptions