mirror of
https://github.com/public-transport/db-vendo-client.git
synced 2025-02-23 07:09:35 +02:00
tripsByName: support some journey filters
This commit is contained in:
parent
fd6a349b64
commit
39ca7ede57
2 changed files with 49 additions and 1 deletions
|
@ -25,6 +25,20 @@ With `opt`, you can override the default options, which look like this:
|
||||||
fromWhen: null, untilWhen: null,
|
fromWhen: null, untilWhen: null,
|
||||||
|
|
||||||
onlyCurrentlyRunning: true,
|
onlyCurrentlyRunning: true,
|
||||||
|
products: {
|
||||||
|
// these entries may vary from profile to profile
|
||||||
|
suburban: true,
|
||||||
|
subway: true,
|
||||||
|
tram: true,
|
||||||
|
bus: true,
|
||||||
|
ferry: true,
|
||||||
|
express: true,
|
||||||
|
regional: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
currentlyStoppingAt: null, // only show trips currently stopping at a stop/station, string
|
||||||
|
lineName: null, // only show trips with this line name, string
|
||||||
|
operatorNames: null, // only show trips with these operator names, array of strings
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
36
index.js
36
index.js
|
@ -504,17 +504,25 @@ const createClient = (profile, userAgent, opt = {}) => {
|
||||||
when: null,
|
when: null,
|
||||||
fromWhen: null, untilWhen: null,
|
fromWhen: null, untilWhen: null,
|
||||||
onlyCurrentlyRunning: true,
|
onlyCurrentlyRunning: true,
|
||||||
|
products: {},
|
||||||
|
currentlyStoppingAt: null,
|
||||||
|
lineName: null,
|
||||||
|
operatorNames: null,
|
||||||
|
additionalFilters: [], // undocumented
|
||||||
}, opt)
|
}, opt)
|
||||||
|
|
||||||
const req = {
|
const req = {
|
||||||
// fields: https://github.com/marudor/BahnhofsAbfahrten/blob/f619e754f212980261eb7e2b151cd73ba0213da8/packages/types/HAFAS/JourneyMatch.ts#L4-L23
|
// fields: https://github.com/marudor/BahnhofsAbfahrten/blob/f619e754f212980261eb7e2b151cd73ba0213da8/packages/types/HAFAS/JourneyMatch.ts#L4-L23
|
||||||
input: lineNameOrFahrtNr,
|
input: lineNameOrFahrtNr,
|
||||||
onlyCR: opt.onlyCurrentlyRunning,
|
onlyCR: opt.onlyCurrentlyRunning,
|
||||||
|
jnyFltrL: [
|
||||||
|
profile.formatProductsFilter({profile}, opt.products),
|
||||||
|
],
|
||||||
// todo: passing `tripId` yields a `CGI_READ_FAILED` error
|
// todo: passing `tripId` yields a `CGI_READ_FAILED` error
|
||||||
// todo: passing a stop ID as `extId` yields a `PARAMETER` error
|
// todo: passing a stop ID as `extId` yields a `PARAMETER` error
|
||||||
// todo: `onlyRT: true` reduces the number of results, but filters recent trips 🤔
|
// todo: `onlyRT: true` reduces the number of results, but filters recent trips 🤔
|
||||||
// todo: `onlyTN: true` yields a `NO_MATCH` error
|
// todo: `onlyTN: true` yields a `NO_MATCH` error
|
||||||
// todo: jnyFltrL, useAeqi
|
// todo: useAeqi
|
||||||
}
|
}
|
||||||
if (opt.when !== null) {
|
if (opt.when !== null) {
|
||||||
req.date = profile.formatDate(profile, new Date(opt.when))
|
req.date = profile.formatDate(profile, new Date(opt.when))
|
||||||
|
@ -529,6 +537,32 @@ const createClient = (profile, userAgent, opt = {}) => {
|
||||||
req.dateE = profile.formatDate(profile, new Date(opt.untilWhen))
|
req.dateE = profile.formatDate(profile, new Date(opt.untilWhen))
|
||||||
req.timeE = profile.formatTime(profile, new Date(opt.untilWhen))
|
req.timeE = profile.formatTime(profile, new Date(opt.untilWhen))
|
||||||
}
|
}
|
||||||
|
const filter = (mode, type, value) => ({mode, type, value})
|
||||||
|
if (opt.currentlyStoppingAt !== null) {
|
||||||
|
if (!isNonEmptyString(opt.currentlyStoppingAt)) {
|
||||||
|
throw new TypeError('opt.currentlyStoppingAt must be a non-empty string.')
|
||||||
|
}
|
||||||
|
req.jnyFltrL.push(filter('INC', 'STATIONS', opt.currentlyStoppingAt))
|
||||||
|
}
|
||||||
|
if (opt.lineName !== null) {
|
||||||
|
if (!isNonEmptyString(opt.lineName)) {
|
||||||
|
throw new TypeError('opt.lineName must be a non-empty string.')
|
||||||
|
}
|
||||||
|
// todo: does this target `line` or `lineId`?
|
||||||
|
req.jnyFltrL.push(filter('INC', 'LINE', opt.lineName))
|
||||||
|
}
|
||||||
|
if (opt.operatorNames !== null) {
|
||||||
|
if (
|
||||||
|
!Array.isArray(opt.operatorNames)
|
||||||
|
|| opt.operatorNames.length === 0
|
||||||
|
|| !opt.operatorNames.every(isNonEmptyString)
|
||||||
|
) {
|
||||||
|
throw new TypeError('opt.operatorNames must be an array of non-empty strings.')
|
||||||
|
}
|
||||||
|
// todo: is the an escaping mechanism for ","
|
||||||
|
req.jnyFltrL.push(filter('INC', 'OP', opt.operatorNames.join(',')))
|
||||||
|
}
|
||||||
|
req.jnyFltrL = [...req.jnyFltrL, ...opt.additionalFilters]
|
||||||
|
|
||||||
return profile.request({profile, opt}, userAgent, {
|
return profile.request({profile, opt}, userAgent, {
|
||||||
cfg: {polyEnc: 'GPA'},
|
cfg: {polyEnc: 'GPA'},
|
||||||
|
|
Loading…
Add table
Reference in a new issue