add KVB profile 📝

fixes #250
This commit is contained in:
Jannis R 2021-11-27 23:41:40 +01:00
parent 39950122a6
commit ed86ad0b56
No known key found for this signature in database
GPG key ID: 0FE83946296A88A5
10 changed files with 218 additions and 1 deletions

15
p/kvb/base.json Normal file
View file

@ -0,0 +1,15 @@
{
"auth": {
"type": "AID",
"aid": "Rt6foY5zcTTRXMQs"
},
"client": {
"type": "WEB",
"id": "HAFAS",
"name": "webapp",
"l": "vs_webapp"
},
"endpoint": "https://auskunft.kvb.koeln/gate",
"defaultLanguage": "de",
"ver": "1.42"
}

47
p/kvb/example.js Normal file
View file

@ -0,0 +1,47 @@
'use strict'
const createClient = require('../..')
const kvbProfile = require('.')
const client = createClient(kvbProfile, 'hafas-client example')
const heumarkt = '900000001'
const poststr = '900000003'
// client.journeys(heumarkt, poststr, {
// results: 1, stopovers: true,
// })
// .then(({journeys}) => {
// const [journey] = journeys
// return client.refreshJourney(journey.refreshToken, {stopovers: true, remarks: true})
// })
// .then(({journeys}) => {
// const [journey] = journeys
// const leg = journey.legs[0]
// return client.trip(leg.tripId, leg.line.name, {polyline: true})
// })
// client.departures(heumarkt, {duration: 1})
// client.arrivals(heumarkt, {duration: 10, linesOfStops: true})
client.locations('heumarkt', {results: 3})
// client.stop(heumarkt, {linesOfStops: true})
// client.nearby({
// type: 'location',
// id: '991023531',
// address: 'An den Dominikanern 27',
// latitude: 50.942454, longitude: 6.954064,
// }, {distance: 500})
// client.reachableFrom({
// type: 'location',
// id: '991023531',
// address: 'An den Dominikanern 27',
// latitude: 50.942454, longitude: 6.954064,
// }, {
// maxDuration: 15,
// })
.then((data) => {
console.log(require('util').inspect(data, {depth: null, colors: true}))
})
.catch(console.error)

63
p/kvb/index.js Normal file
View file

@ -0,0 +1,63 @@
'use strict'
const baseProfile = require('./base.json')
const products = [{
id: 'stadtbahn',
mode: 'train',
bitmasks: [2],
name: 'Stadtbahn',
short: 'Stadtbahn',
default: true,
}, {
id: 'bus',
mode: 'bus',
bitmasks: [8],
name: 'Bus',
short: 'Bus',
default: true,
}, {
id: 'taxibus',
mode: 'bus',
bitmasks: [256],
name: 'Taxibus',
short: 'Taxibus',
default: true,
}, {
id: 's-bahn',
mode: 'train',
bitmasks: [1],
name: 'S-Bahn',
short: 'S',
default: true,
}, {
id: 'regionalverkehr',
mode: 'train',
bitmasks: [46],
name: 'Regionalverkehr',
short: 'Regionalverkehr',
default: true,
}, {
id: 'fernverkehr',
mode: 'train',
bitmasks: [32],
name: 'Fernverkehr',
short: 'Fernverkehr',
default: true,
}]
const vosProfile = {
...baseProfile,
locale: 'de-DE',
timezone: 'Europe/Berlin',
products,
departuresGetPasslist: false,
departuresStbFltrEquiv: false,
refreshJourneyUseOutReconL: true,
trip: true,
reachableFrom: true,
}
module.exports = vosProfile

15
p/kvb/readme.md Normal file
View file

@ -0,0 +1,15 @@
# KVB profile for `hafas-client`
[*Kölner Verkehrs-Betriebe (KVB)*](https://de.wikipedia.org/wiki/Kölner_Verkehrs-Betriebe) is the local transport provider of [Cologne](https://en.wikipedia.org/wiki/Cologne). This profile adds *KVB* support to `hafas-client`.
## Usage
```js
const createClient = require('hafas-client')
const kvbProfile = require('hafas-client/p/kvb')
// create a client with KVB profile
const client = createClient(kvbProfile, 'my-awesome-program')
```
Check out the [code examples](example.js).

View file

@ -38,6 +38,7 @@ HAFAS endpoint | wrapper library | docs | example code | profile name
[Verkehrsverbund Mittelthüringen (VMT)](https://en.wikipedia.org/wiki/Verkehrsverbund_Mittelthüringen) | - | [docs](vmt/readme.md) | [example](vmt/example.js) | [`vmt`](vmt)
[Verkehrsgemeinschaft Osnabrück (VOS)](https://de.wikipedia.org/wiki/Verkehrsgemeinschaft_Osnabrück) | - | [docs](vos/readme.md) | [example](vos/example.js) | [`vos`](vos)
[Aachener Verkehrsverbund (AVV)](https://de.wikipedia.org/wiki/Verkehrsgemeinschaft_Osnabrück) | - | [docs](avv/readme.md) | [example](avv/example.js) | [`avv`](avv)
[Kölner Verkehrs-Betriebe (KVB)](https://de.wikipedia.org/wiki/Kölner_Verkehrs-Betriebe) | - | [docs](kvb/readme.md) | [example](kvb/example.js) | [`kvb`](kvb)
[Rejseplanen in Denmark](http://www.rejseplanen.dk) | - | [docs](rejseplanen/readme.md) | [example](rejseplanen/example.js) | [`rejseplanen`](rejseplanen)
[Innsbrucker Verkehrsbetriebe (IVB)](https://de.wikipedia.org/wiki/Innsbrucker_Verkehrsbetriebe_und_Stubaitalbahn) | - | [docs](ivb/readme.md) | [example](ivb/example.js) | [`ivb`](ivb)
[Oberösterreichischer Verkehrsverbund (OÖVV)](https://de.wikipedia.org/wiki/Oberösterreichischer_Verkehrsverbund) | - | [docs](ooevv/readme.md) | [example](ooevv/example.js) | [`ooevv`](ooevv)

View file

@ -0,0 +1 @@
{"graph":{"id":"standard","index":0},"subGraph":{"id":"global","index":0},"svcResL":[{"meth":"LocMatch","res":{"common":{"graphL":[{"id":"standard","index":0}],"icoL":[{"bg":{"b":255,"g":255,"r":255},"brd":{"b":0,"g":0,"r":0},"fg":{"b":0,"g":0,"r":0},"res":"prod_sub"},{"bg":{"b":255,"g":255,"r":255},"brd":{"b":0,"g":0,"r":0},"fg":{"b":0,"g":0,"r":0},"res":"prod_bus"},{"res":"loc_addr"}],"prodL":[{"prodCtx":{"lineId":"de:vrs:1"},"cls":2,"icoX":0,"name":"1","nameS":"1"},{"prodCtx":{"lineId":"de:vrs:5"},"cls":2,"icoX":0,"name":"5","nameS":"5"},{"prodCtx":{"lineId":"de:vrs:7"},"cls":2,"icoX":0,"name":"7","nameS":"7"},{"prodCtx":{"lineId":"de:vrs:9"},"cls":2,"icoX":0,"name":"9","nameS":"9"},{"prodCtx":{"lineId":"E"},"cls":2,"icoX":0,"name":"E","nameS":"E"},{"prodCtx":{"lineId":"de:vrs:106"},"cls":8,"icoX":1,"name":"106","nameS":"106"},{"prodCtx":{"lineId":"de:vrs:132"},"cls":8,"icoX":1,"name":"132","nameS":"132"},{"prodCtx":{"lineId":"de:vrs:133"},"cls":8,"icoX":1,"name":"133","nameS":"133"},{"prodCtx":{"lineId":"WUPSI__250"},"cls":8,"icoX":1,"name":"250","nameS":"250"},{"prodCtx":{"lineId":"RVK_WK_260"},"cls":8,"icoX":1,"name":"260","nameS":"260"},{"prodCtx":{"lineId":"REVG___978"},"cls":8,"icoX":1,"name":"978","nameS":"978"},{"prodCtx":{"lineId":"RVK_WK_N26"},"cls":8,"icoX":1,"name":"N26","nameS":"N26"},{"prodCtx":{"lineId":"de:vrs:151"},"cls":8,"icoX":1,"name":"151","nameS":"151"},{"prodCtx":{"lineId":"de:vrs:152"},"cls":8,"icoX":1,"name":"152","nameS":"152"},{"prodCtx":{"lineId":"de:vrs:165"},"cls":8,"icoX":1,"name":"165","nameS":"165"},{"prodCtx":{"lineId":"de:vrs:3"},"cls":2,"icoX":0,"name":"3","nameS":"3"},{"prodCtx":{"lineId":"de:vrs:4"},"cls":2,"icoX":0,"name":"4","nameS":"4"},{"prodCtx":{"lineId":"de:vrs:16"},"cls":2,"icoX":0,"name":"16","nameS":"16"},{"prodCtx":{"lineId":"de:vrs:18"},"cls":2,"icoX":0,"name":"18","nameS":"18"},{"prodCtx":{"lineId":"de:vrs:136"},"cls":8,"icoX":1,"name":"136","nameS":"136"},{"prodCtx":{"lineId":"de:vrs:146"},"cls":8,"icoX":1,"name":"146","nameS":"146"}],"subGraphL":[{"id":"Koel_619","index":1159,"name":"Köln Heumarkt"},{"id":"Koel_289","index":294,"name":"Köln Eil Heumarer Str."},{"id":"Koel_620","index":1160,"name":"Köln Neumarkt"}],"viewL":[{"id":"standard","index":0,"type":"WGS84"},{"id":"Koel_619","index":1,"type":"WGS84"},{"id":"Koel_289","index":1,"type":"WGS84"},{"id":"Koel_620","index":1,"type":"WGS84"}]},"match":{"locL":[{"crd":{"viewAlternatives":[{"subGraphNodes":[{"viewNodes":[{"viewX":0},{"viewX":1}],"subGraphX":0}],"graphX":0}],"floor":0,"x":6959269,"y":50935712},"gidL":["A×de:05315:11110"],"pRefL":[0,1,2,3,4,5,6,7,8,9,10,11],"TZOffset":0,"chgTime":"000000","extId":"900000001","icoX":0,"isMainMast":true,"lid":"A=1@O=Köln Heumarkt@X=6959269@Y=50935712@U=1@L=900000001@B=1@p=1637929092@","meta":true,"name":"Köln Heumarkt","pCls":10,"state":"F","type":"S","wt":22316},{"crd":{"x":6960150,"y":50934759},"icoX":2,"lid":"A=2@O=Heumarkt@X=6960150@Y=50934759@U=100@b=991023566@B=1@p=1606316333@","name":"Heumarkt","state":"M","type":"A"},{"crd":{"x":6960518,"y":50934651},"icoX":2,"lid":"A=2@O=Heumarkt, 50667@X=6960518@Y=50934651@U=100@b=991067738@B=1@p=1606316333@","name":"Heumarkt, 50667","state":"M","type":"A"},{"crd":{"viewAlternatives":[{"subGraphNodes":[{"viewNodes":[{"viewX":0},{"viewX":2}],"subGraphX":1}],"graphX":0}],"floor":0,"x":7077891,"y":50897211},"gidL":["A×de:05315:17265"],"pRefL":[12,13,14],"TZOffset":0,"chgTime":"000000","extId":"900000460","icoX":1,"isMainMast":true,"lid":"A=1@O=Köln Eil Heumarer Str.@X=7077891@Y=50897211@U=1@L=900000460@B=1@p=1637929092@","meta":true,"name":"Köln Eil Heumarer Str.","pCls":8,"state":"F","type":"S","wt":2019},{"crd":{"viewAlternatives":[{"subGraphNodes":[{"viewNodes":[{"viewX":0},{"viewX":3}],"subGraphX":2}],"graphX":0}],"floor":0,"x":6948329,"y":50935667},"gidL":["A×de:05315:11111"],"pRefL":[0,15,16,2,3,17,18,4,19,20],"TZOffset":0,"chgTime":"000000","extId":"900000002","icoX":0,"isMainMast":true,"lid":"A=1@O=Köln Neumarkt@X=6948329@Y=50935667@U=1@L=900000002@B=1@p=1637929092@","meta":true,"name":"Köln Neumarkt","pCls":10,"state":"F","type":"S","wt":22316}],"field":"S","state":"L"}},"err":"OK"}],"view":{"id":"standard","index":0,"type":"WGS84"},"err":"OK","id":"m5wejiqikcy3wiwg","lang":"deu","ver":"1.42"}

View file

@ -0,0 +1,39 @@
{
"statusCode": 200,
"headers": {
"date": "Sat, 27 Nov 2021 22:46:26 GMT",
"server": "Apache/2.4.38 (Debian) OpenSSL/1.1.1d",
"content-type": "application/json",
"access-control-allow-headers": "*",
"access-control-allow-methods": "GET,POST,OPTIONS",
"access-control-allow-origin": "*",
"backend-group": "default",
"connection": "close",
"transfer-encoding": "chunked"
},
"url": "https://auskunft.kvb.koeln/gate",
"time": 195,
"request": {
"method": "POST",
"headers": {
"Content-Type": [
"application/json"
],
"Accept-Encoding": [
"gzip, br, deflate"
],
"Accept": [
"application/json"
],
"user-agent": [
"public-transpo912a53de656frt/hafas-client:test"
],
"Content-Length": [
"279"
],
"Connection": [
"close"
]
}
}
}

35
test/e2e/kvb.js Normal file
View file

@ -0,0 +1,35 @@
'use strict'
const tap = require('tap')
const {createWhen} = require('./lib/util')
const createClient = require('../..')
const kvbProfile = require('../../p/kvb')
const createValidate = require('./lib/validate-fptf-with')
const when = createWhen(kvbProfile.timezone, kvbProfile.locale)
const cfg = {
when,
stationCoordsOptional: false,
products: kvbProfile.products,
maxLatitude: 51.6479,
maxLongitude: 7.8333,
minLatitude: 50.3253,
minLongitude: 6.2320,
}
const validate = createValidate(cfg)
const client = createClient(kvbProfile, 'public-transport/hafas-client:test')
const heumarkt = '900000001'
tap.test('locations named "heumarkt"', async (t) => {
const locations = await client.locations('heumarkt')
validate(t, locations, 'locations', 'locations')
t.ok(locations.some((l) => {
return l.station && l.station.id === heumarkt || l.id === heumarkt
}), 'Heumarkt not found')
t.end()
})

View file

@ -71,3 +71,4 @@ node -p "$query" "$src/ch/bls-hafas-mgate.json" >../p/bls/base.json
node -p "$query" "$src/ch/tpg-hafas-mgate.json" >../p/tpg/base.json
node -p "$query" "$src/ch/zvv-hafas-mgate.json" >../p/zvv/base.json
node -p "$query" "$src/us/dart-hafas-mgate.json" >../p/dart/base.json
node -p "$query" "$src/de/kvb-hafas-mgate.json" >../p/kvb/base.json

@ -1 +1 @@
Subproject commit 023caad70f42e808189a6d3e1b6fcaef47ce870c
Subproject commit fcb5e2f94abc00e718b44e487de11ebe39f6b89f