-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathBusTimes.js
91 lines (75 loc) · 2.94 KB
/
BusTimes.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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
const inputs = require('./config/core/inputs');
const config = require('./config/config');
const Timetable = require('./models/Timetable');
const axios = require('axios');
const prompt = require('prompt');
console.log("[NCTBuses]");
let line = null;
let stops = null;
let timetable = [];
prompt.start();
prompt.get(inputs.busTimes, (error, result) => {
if (error) {
console.error(error);
return 1;
}
line = result.line;
console.log('Command line received results...');
console.log(`Line: ${result.line}`);
console.log(`Direction: ${result.direction}`);
if(result.line === "" || result.direction === "") {
console.error("Error: No values supplied. Please try again.");
return;
}
getLineStops(result.line, result.direction);
});
const getLineStops = (line, direction) => {
axios.get(`https://nctx.arcticapi.com/network/operators/NCT/lines/${line}/waypoints?direction=${direction.toLowerCase()}`)
.then((response) => {
if(response.data.length <= 0) {
throw new Error("Unable to find stops on route provided. Please try again.");
}
stops = response.data['_embedded']['naptan:stop'];
})
.then(() => {
getStopTimes(config[direction.toLowerCase()][line]);
// getStopTimes(config[direction.toLowerCase()]);
})
.catch((error) => {
console.log(`An error occurred: ${error.message}`);
})
};
const getStopTimes = (preference) => {
if(! preference) {
console.log('Error: no favourite stops found for this line and direction. Please add a favourite stop using - FindMyBustStop');
return;
}
axios.get(`https://nctx.arcticapi.com/network/stops/${preference.code}/visits`)
.then((response) => {
if(response.data.length <= 0) {
throw new Error("Unable to find times for the stop. Please check your stop in the config and try again.");
}
const timetableResponse = response.data['_embedded']['timetable:visit'];
for(let i = 0; i < timetableResponse.length; i++) {
if(timetableResponse[i]['_links']['transmodel:line'].name === `${line}`) {
timetable.push(new Timetable(timetableResponse[i], line, preference.name));
}
}
})
.then(() => {
displayTimes();
})
.catch((error) => {
console.error(`An error occurred: ${error.message}`);
});
};
const displayTimes = () => {
const busTimes = [...timetable];
if(config.results && config.results.filter) {
busTimes.splice(config.results.filter, busTimes.length - config.results.filter);
}
console.log('--------');
console.log('Results:');
// Format the headings array.
console.table(busTimes, ['pickup', 'destination', 'line', 'expectedArrival', 'expectedDeparture', 'displayTime', 'late', 'isRealTime'])
};