Stboard legacy encoding, refactoring
This commit is contained in:
parent
59c28f437d
commit
7437fbf85b
180
package-lock.json
generated
180
package-lock.json
generated
@ -1,6 +1,8 @@
|
||||
{
|
||||
"requires": true,
|
||||
"name": "simple_hafas",
|
||||
"version": "0.0.1",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"@derhuerst/br2nl": {
|
||||
"version": "1.0.0",
|
||||
@ -181,11 +183,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"decode-uri-component": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
|
||||
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
|
||||
},
|
||||
"depd": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
|
||||
@ -421,11 +418,97 @@
|
||||
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
|
||||
"integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
|
||||
},
|
||||
"iso-8859-15": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/iso-8859-15/-/iso-8859-15-0.1.2.tgz",
|
||||
"integrity": "sha1-KNGlzSp6OQMFl937HLiZeThCVzs="
|
||||
},
|
||||
"iso-8859-2": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/iso-8859-2/-/iso-8859-2-0.1.2.tgz",
|
||||
"integrity": "sha1-VQtMDykufryHM6dv/S5pkIx77P4="
|
||||
},
|
||||
"iso-8859-3": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/iso-8859-3/-/iso-8859-3-0.1.2.tgz",
|
||||
"integrity": "sha1-PeT+tr1fZjllI+aSLFfSGKXJd2Q="
|
||||
},
|
||||
"iso-8859-4": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/iso-8859-4/-/iso-8859-4-0.1.2.tgz",
|
||||
"integrity": "sha1-bM3E/URq2f0uDPMXTnu9H1haw+Y="
|
||||
},
|
||||
"iso-8859-5": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/iso-8859-5/-/iso-8859-5-0.1.2.tgz",
|
||||
"integrity": "sha1-oYkIiIXgtAXYgB9tbkLD/gxDvKs="
|
||||
},
|
||||
"iso-8859-6": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/iso-8859-6/-/iso-8859-6-0.1.2.tgz",
|
||||
"integrity": "sha1-YQwEDlxfCXJzCqL4Kyjl54dNVmE="
|
||||
},
|
||||
"iso-8859-7": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/iso-8859-7/-/iso-8859-7-0.1.2.tgz",
|
||||
"integrity": "sha1-Tlr64n716I4dXmziMVspkmDXuZk="
|
||||
},
|
||||
"iso-8859-8": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/iso-8859-8/-/iso-8859-8-0.1.2.tgz",
|
||||
"integrity": "sha1-NUvZfApt4/ny7Q0x77ONQr+gvOU="
|
||||
},
|
||||
"iso-8859-8-i": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/iso-8859-8-i/-/iso-8859-8-i-0.1.2.tgz",
|
||||
"integrity": "sha1-cAlX57fEK6i1RruHbbh1nQDyGVw="
|
||||
},
|
||||
"jconv": {
|
||||
"version": "0.1.5",
|
||||
"resolved": "https://registry.npmjs.org/jconv/-/jconv-0.1.5.tgz",
|
||||
"integrity": "sha1-xlDtukzCzm3Skr85ELEjQzxLR/U="
|
||||
},
|
||||
"json-parse-better-errors": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
|
||||
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
|
||||
},
|
||||
"koi8-r": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/koi8-r/-/koi8-r-0.1.2.tgz",
|
||||
"integrity": "sha1-pc2d3IVV3NYAc1tokPLT2GlU5+g="
|
||||
},
|
||||
"legacy-encoding": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/legacy-encoding/-/legacy-encoding-3.0.0.tgz",
|
||||
"integrity": "sha1-oTvTn9kXZXLhRTbTFd/KjqOA2OE=",
|
||||
"requires": {
|
||||
"iconv-lite": "^0.4.4",
|
||||
"iso-8859-15": "^0.1.2",
|
||||
"iso-8859-2": "^0.1.2",
|
||||
"iso-8859-3": "^0.1.2",
|
||||
"iso-8859-4": "^0.1.2",
|
||||
"iso-8859-5": "^0.1.2",
|
||||
"iso-8859-6": "^0.1.2",
|
||||
"iso-8859-7": "^0.1.2",
|
||||
"iso-8859-8": "^0.1.2",
|
||||
"iso-8859-8-i": "^0.1.2",
|
||||
"jconv": "^0.1.5",
|
||||
"koi8-r": "^0.1.2",
|
||||
"macintosh": "^0.1.2",
|
||||
"windows-1250": "^0.1.2",
|
||||
"windows-1251": "^0.1.2",
|
||||
"windows-1252": "^0.1.2",
|
||||
"windows-1253": "^0.1.2",
|
||||
"windows-1254": "^0.1.2",
|
||||
"windows-1255": "^0.1.2",
|
||||
"windows-1256": "^0.1.2",
|
||||
"windows-1257": "^0.1.2",
|
||||
"windows-1258": "^0.1.2",
|
||||
"windows-874": "^0.1.2",
|
||||
"x-mac-cyrillic": "^0.1.2"
|
||||
}
|
||||
},
|
||||
"load-json-file": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
|
||||
@ -470,6 +553,11 @@
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-1.21.0.tgz",
|
||||
"integrity": "sha512-GkS6D9prDlacKi062DW/OxVI7i+CKgfBc2uDqI//UH1VwPPlgYiMwfoP5uHK3UfzdjXgbwmEwZHWIGgLcg/APg=="
|
||||
},
|
||||
"macintosh": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/macintosh/-/macintosh-0.1.2.tgz",
|
||||
"integrity": "sha1-gu9KUSjxqlH2I6pVRcJJRgdqybs="
|
||||
},
|
||||
"map-obj": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
|
||||
@ -602,11 +690,6 @@
|
||||
"retry": "^0.12.0"
|
||||
}
|
||||
},
|
||||
"p-throttle": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/p-throttle/-/p-throttle-1.1.0.tgz",
|
||||
"integrity": "sha1-3QgiJH/8d2eox7sRhvzGMv6lcHU="
|
||||
},
|
||||
"p-try": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
|
||||
@ -681,16 +764,6 @@
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.0.tgz",
|
||||
"integrity": "sha512-27RP4UotQORTpmNQDX8BHPukOnBP3p1uUJY5UnDhaJB+rMt9iMsok724XL+UHU23bEFOHRMQ2ZhI99qOWUMGFA=="
|
||||
},
|
||||
"query-string": {
|
||||
"version": "6.8.3",
|
||||
"resolved": "https://registry.npmjs.org/query-string/-/query-string-6.8.3.tgz",
|
||||
"integrity": "sha512-llcxWccnyaWlODe7A9hRjkvdCKamEKTh+wH8ITdTc3OhchaqUZteiSCX/2ablWHVrkVIe04dntnaZJ7BdyW0lQ==",
|
||||
"requires": {
|
||||
"decode-uri-component": "^0.2.0",
|
||||
"split-on-first": "^1.0.0",
|
||||
"strict-uri-encode": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"quick-lru": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
|
||||
@ -867,21 +940,11 @@
|
||||
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
|
||||
"integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
|
||||
},
|
||||
"split-on-first": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz",
|
||||
"integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw=="
|
||||
},
|
||||
"statuses": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
|
||||
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
|
||||
},
|
||||
"strict-uri-encode": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
|
||||
"integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY="
|
||||
},
|
||||
"strip-bom": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
|
||||
@ -963,6 +1026,61 @@
|
||||
"resolved": "https://registry.npmjs.org/vbb-translate-ids/-/vbb-translate-ids-3.1.0.tgz",
|
||||
"integrity": "sha512-5APLiY9foEeKQfUXBSz0sasTOrReTuua4uMhENdVzMWvcyuQI61Q+RBITFXhdeALz5+W0/67MoO4IhxAVSuJ/w=="
|
||||
},
|
||||
"windows-1250": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/windows-1250/-/windows-1250-0.1.2.tgz",
|
||||
"integrity": "sha1-w3uaBz5AW89CCB02uq8v3nc7mcw="
|
||||
},
|
||||
"windows-1251": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/windows-1251/-/windows-1251-0.1.2.tgz",
|
||||
"integrity": "sha1-SIHY+QU9Dre1+l008PlNYN5DwtM="
|
||||
},
|
||||
"windows-1252": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/windows-1252/-/windows-1252-0.1.2.tgz",
|
||||
"integrity": "sha1-Zit1Mede3ZRcLby6K/eZwXC4yBY="
|
||||
},
|
||||
"windows-1253": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/windows-1253/-/windows-1253-0.1.2.tgz",
|
||||
"integrity": "sha1-z6AiW33dZqj0A43qbpOJRXMPklE="
|
||||
},
|
||||
"windows-1254": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/windows-1254/-/windows-1254-0.1.2.tgz",
|
||||
"integrity": "sha1-rXeQfF7k7FGvpkpFyqJF7C1Ti4M="
|
||||
},
|
||||
"windows-1255": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/windows-1255/-/windows-1255-0.1.2.tgz",
|
||||
"integrity": "sha1-HSCCyriBdV+jIr7ELz9iaRjMpSE="
|
||||
},
|
||||
"windows-1256": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/windows-1256/-/windows-1256-0.1.2.tgz",
|
||||
"integrity": "sha1-mwlXRpikEnQfSzVsJFCo/5KpDJI="
|
||||
},
|
||||
"windows-1257": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/windows-1257/-/windows-1257-0.1.2.tgz",
|
||||
"integrity": "sha1-i0xE7rDpcbtzQPv0+eZ06GDLtmY="
|
||||
},
|
||||
"windows-1258": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/windows-1258/-/windows-1258-0.1.2.tgz",
|
||||
"integrity": "sha1-MCM96qvaEYSUJGkzOIVrlVLeVg4="
|
||||
},
|
||||
"windows-874": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/windows-874/-/windows-874-0.1.2.tgz",
|
||||
"integrity": "sha1-dyI7Ptabdd6Yhtz6K73VI6fconc="
|
||||
},
|
||||
"x-mac-cyrillic": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/x-mac-cyrillic/-/x-mac-cyrillic-0.1.2.tgz",
|
||||
"integrity": "sha1-dpMPw3V1SSmxCkmONFE3+Ut0ezw="
|
||||
},
|
||||
"yargs-parser": {
|
||||
"version": "10.1.0",
|
||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
|
||||
|
@ -5,7 +5,8 @@
|
||||
"main": "server.js",
|
||||
"dependencies": {
|
||||
"express": "^4.17.1",
|
||||
"hafas-client": "^4.6.1"
|
||||
"hafas-client": "^4.6.1",
|
||||
"legacy-encoding": "^3.0.0"
|
||||
},
|
||||
"devDependencies": {},
|
||||
"scripts": {
|
||||
|
70
server.js
70
server.js
@ -1,5 +1,6 @@
|
||||
const createClient = require('hafas-client')
|
||||
const insaProfile = require('hafas-client/p/insa')
|
||||
const legacyEncoder = require('legacy-encoding')
|
||||
|
||||
var express = require("express");
|
||||
var app = express();
|
||||
@ -7,8 +8,7 @@ const port = 3000
|
||||
|
||||
const client = createClient(insaProfile, 'my-awesome-program')
|
||||
|
||||
function printResult(departures,respdata) {
|
||||
let outstr = ""
|
||||
function formatResult(departures,respdata) {
|
||||
departures.forEach(element => {
|
||||
let delay = ""
|
||||
if (element['delay'] != 0) {
|
||||
@ -25,7 +25,23 @@ function printResult(departures,respdata) {
|
||||
return respdata;
|
||||
}
|
||||
|
||||
async function getNearestStationDepartures(lat, lon) {
|
||||
function formatStboard(departures,respdata,num) {
|
||||
let count = 0;
|
||||
departures.forEach(departure => {
|
||||
if (count<num) {
|
||||
timediff = Math.floor(Math.max(0,(( ( Date.parse(departure['when']) - new Date().getTime() ) / 1000 ) / 60)))
|
||||
respdata['departures'].push({
|
||||
"line": departure['line']['id'].toUpperCase().substr(-3),
|
||||
"dest": departure['direction'],
|
||||
"timefromnow": timediff+"m"
|
||||
})
|
||||
}
|
||||
count++
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
async function getNearestStation(lat, lon) {
|
||||
var queryPromise = client.nearby({
|
||||
type: 'location',
|
||||
latitude: lat,
|
||||
@ -34,11 +50,12 @@ async function getNearestStationDepartures(lat, lon) {
|
||||
distance: 400
|
||||
})
|
||||
var result = await queryPromise
|
||||
var respdata = { "name" : result[0]['name'],
|
||||
"departures" : [] }
|
||||
var queryPromise2 = client.departures(result[0]['id'])
|
||||
return result[0]
|
||||
}
|
||||
async function getStationDepartures(id) {
|
||||
var queryPromise2 = client.departures(id)
|
||||
var departures = await queryPromise2
|
||||
return printResult(departures,respdata)
|
||||
return departures
|
||||
}
|
||||
|
||||
function cutPadString(string, length) {
|
||||
@ -62,14 +79,43 @@ app.get('/', (req, res) => res.send('Hello World!'))
|
||||
app.use(express.json());
|
||||
|
||||
// Access the parse results as request.body
|
||||
app.post('/', function (request, response) {
|
||||
app.post('/departures/nearest', function (request, response) {
|
||||
console.log(request.body.lat);
|
||||
console.log(request.body.lon);
|
||||
getNearestStationDepartures(request.body.lat, request.body.lon)
|
||||
.then((result) => {
|
||||
response.send(result)
|
||||
getNearestStation(request.body.lat, request.body.lon)
|
||||
.then((station) => {
|
||||
getStationDepartures(station)
|
||||
.then((departures) => {
|
||||
var respdata = {
|
||||
"name": station['name'],
|
||||
"departures": []
|
||||
}
|
||||
formatResult(departures, respdata)
|
||||
response.send(respdata)
|
||||
})
|
||||
.catch(console.log("Error while getting departures."))
|
||||
})
|
||||
.catch(console.log("Error."))
|
||||
.catch(console.log("Error while getting Station ID."))
|
||||
|
||||
});
|
||||
|
||||
app.post('/radar', function (request, response) {
|
||||
res.send("//TODO")
|
||||
});
|
||||
|
||||
app.get('/stboard/:id/:num', function (req, res, next) {
|
||||
console.log('id was '+ req.params.id)
|
||||
getStationDepartures(req.params.id)
|
||||
.then((departures) => {
|
||||
var respdata = {
|
||||
"departures": []
|
||||
}
|
||||
formatStboard(departures, respdata, req.params.num)
|
||||
/* Yikes. */
|
||||
res.write(legacyEncoder.encode(JSON.stringify(respdata),'cp850'))
|
||||
res.end()
|
||||
})
|
||||
.catch(console.log("Error while getting departures."))
|
||||
})
|
||||
|
||||
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
|
Loading…
x
Reference in New Issue
Block a user