Stboard legacy encoding, refactoring

This commit is contained in:
Phillip Kühne 2020-02-02 02:41:55 +01:00
parent 59c28f437d
commit 7437fbf85b
4 changed files with 212 additions and 44 deletions

180
package-lock.json generated
View File

@ -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",

View File

@ -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": {

View File

@ -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}!`))

View File

@ -11,6 +11,9 @@ var queryPromise = client.nearby({
distance: 400
})
async function getNearestStation() {
}
async function getNearestStationDepartures() {
var result = await queryPromise