mirror of
				https://github.com/public-transport/db-vendo-client.git
				synced 2025-10-26 05:36:31 +02:00 
			
		
		
		
	prepare move to public-transport org
This commit is contained in:
		
							parent
							
								
									e71908ed1c
								
							
						
					
					
						commit
						98139f9210
					
				
					 8 changed files with 18 additions and 18 deletions
				
			
		|  | @ -8,7 +8,7 @@ | |||
| 
 | ||||
| This guide is about writing such a profile. If you just want to use an already supported endpoint, refer to the [API documentation](readme.md) instead. | ||||
| 
 | ||||
| *Note*: **If you get stuck, ask for help by [creating an issue](https://github.com/derhuerst/hafas-client/issues/new)!** We want to help people expand the scope of this library. | ||||
| *Note*: **If you get stuck, ask for help by [creating an issue](https://github.com/public-transport/hafas-client/issues/new)!** We want to help people expand the scope of this library. | ||||
| 
 | ||||
| ## 0. How do the profiles work? | ||||
| 
 | ||||
|  | @ -61,7 +61,7 @@ If you pass this profile into `hafas-client`, the `parseLine` method will overri | |||
| 1. **Get an iOS or Android device and download the "official" app** for the public transport provider that you want to build a profile for. | ||||
| 2. **Configure a [man-in-the-middle HTTP proxy](https://docs.mitmproxy.org/stable/concepts-howmitmproxyworks/)** like [mitmproxy](https://mitmproxy.org). | ||||
| 	- Configure your device to trust the self-signed SSL certificate, [as outlined in the mitmproxy docs](https://docs.mitmproxy.org/stable/concepts-certificates/). | ||||
| 	- *Note*: This method does not work if the app uses [public key pinning](https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning). In this case (the app won't be able to query data), please [create an issue](https://github.com/derhuerst/hafas-client/issues/new), so we can discuss other techniques. | ||||
| 	- *Note*: This method does not work if the app uses [public key pinning](https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning). In this case (the app won't be able to query data), please [create an issue](https://github.com/public-transport/hafas-client/issues/new), so we can discuss other techniques. | ||||
| 3. **Record requests of the app.** | ||||
| 	- [There's a video showing this step](https://stuff.jannisr.de/how-to-record-hafas-requests.mp4). | ||||
| 	- Make sure to cover all relevant sections of the app, e.g. "journeys", "departures", "live map". Better record more than less; You will regret not having enough information later on. | ||||
|  | @ -74,7 +74,7 @@ If you pass this profile into `hafas-client`, the `parseLine` method will overri | |||
| - **Identify the `locale`.** Basically guess work; Use the date & time formats as an indicator. | ||||
| - **Identify the `timezone`.** This may be tricky, a for example [Deutsche Bahn](https://en.wikipedia.org/wiki/Deutsche_Bahn) returns departures for Moscow as `+01:00` instead of `+03:00`. | ||||
| - **Copy the authentication** and other meta fields, namely `ver`, `ext`, `client` and `lang`. | ||||
| 	- You can find these fields in the root of each request JSON. Check [a VBB request](https://gist.github.com/derhuerst/5fa86ed5aec63645e5ae37e23e555886#file-1-http-L13-L22) and [the corresponding VBB profile](https://github.com/derhuerst/hafas-client/blob/6e61097687a37b60d53e767f2711466b80c5142c/p/vbb/index.js#L22-L29) for an example. | ||||
| 	- You can find these fields in the root of each request JSON. Check [a VBB request](https://gist.github.com/derhuerst/5fa86ed5aec63645e5ae37e23e555886#file-1-http-L13-L22) and [the corresponding VBB profile](https://github.com/public-transport/hafas-client/blob/6e61097687a37b60d53e767f2711466b80c5142c/p/vbb/index.js#L22-L29) for an example. | ||||
| 	- Add a function `transformReqBody(body)` to your profile, which assigns them to `body`. | ||||
| 	- Some profiles have a `checksum` parameter (like [here](https://gist.github.com/derhuerst/2a735268bd82a0a6779633f15dceba33#file-journey-details-1-http-L1)) or two `mic` & `mac` parameters (like [here](https://gist.github.com/derhuerst/5fa86ed5aec63645e5ae37e23e555886#file-1-http-L1)). If you see one of them in your requests, jump to [*Appendix A: checksum, mic, mac*](#appendix-a-checksum-mic-mac). Unfortunately, this is necessary to get the profile working. | ||||
| 
 | ||||
|  | @ -116,7 +116,7 @@ Let's break this down: | |||
| 
 | ||||
| todo: `defaultProducts`, `allProducts`, `bitmasks`, add to profile | ||||
| 
 | ||||
| If you want, you can now **verify that the profile works**; We've prepared [a script](https://runkit.com/derhuerst/hafas-client-profile-example/0.1.0) for that. Alternatively, [submit a Pull Request](https://help.github.com/articles/creating-a-pull-request-from-a-fork/) and we will help you out with testing and improvements. | ||||
| If you want, you can now **verify that the profile works**; We've prepared [a script](https://runkit.com/public-transport/hafas-client-profile-example/0.1.0) for that. Alternatively, [submit a Pull Request](https://help.github.com/articles/creating-a-pull-request-from-a-fork/) and we will help you out with testing and improvements. | ||||
| 
 | ||||
| ### Finding the right values for the `bitmask` field | ||||
| 
 | ||||
|  | @ -157,10 +157,10 @@ You can just query these, as long as you send a formally correct request. | |||
| 
 | ||||
| ### endpoints using the `checksum` query parameter | ||||
| 
 | ||||
| `checksum` is a [message authentication code](https://en.wikipedia.org/wiki/Message_authentication_code): `hafas-client` will compute it by [hashing](https://en.wikipedia.org/wiki/Hash_function) the request body and a secret *salt*. **This secret can be read from the config file inside the app bundle.** There is no guide for this yet, so please [open an issue](https://github.com/derhuerst/hafas-client/issues/new) instead. | ||||
| `checksum` is a [message authentication code](https://en.wikipedia.org/wiki/Message_authentication_code): `hafas-client` will compute it by [hashing](https://en.wikipedia.org/wiki/Hash_function) the request body and a secret *salt*. **This secret can be read from the config file inside the app bundle.** There is no guide for this yet, so please [open an issue](https://github.com/public-transport/hafas-client/issues/new) instead. | ||||
| 
 | ||||
| ### endpoints using the `mic` & `mac` query parameters | ||||
| 
 | ||||
| `mic` is a [message integrity code](https://en.wikipedia.org/wiki/Message_authentication_code), the [hash](https://en.wikipedia.org/wiki/Hash_function) of the request body. | ||||
| 
 | ||||
| `mac` is a [message authentication code](https://en.wikipedia.org/wiki/Message_authentication_code), the hash of `mic` and a secret *salt*. **This secret can be read from the config file inside the app bundle.** There is no guide for this yet, so please [open an issue](https://github.com/derhuerst/hafas-client/issues/new) instead. | ||||
| `mac` is a [message authentication code](https://en.wikipedia.org/wiki/Message_authentication_code), the hash of `mic` and a secret *salt*. **This secret can be read from the config file inside the app bundle.** There is no guide for this yet, so please [open an issue](https://github.com/public-transport/hafas-client/issues/new) instead. | ||||
|  |  | |||
							
								
								
									
										2
									
								
								index.js
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								index.js
									
										
									
									
									
								
							|  | @ -105,7 +105,7 @@ const createClient = (profile, request = _request) => { | |||
| 		// `CGI_READ_FAILED` if you pass `numF`, the parameter for the number
 | ||||
| 		// of results. To circumvent this, we loop here, collecting journeys
 | ||||
| 		// until we have enough.
 | ||||
| 		// see https://github.com/derhuerst/hafas-client/pull/23#issuecomment-370246163
 | ||||
| 		// see https://github.com/public-transport/hafas-client/pull/23#issuecomment-370246163
 | ||||
| 		// todo: check if `numF` is supported again, revert this change
 | ||||
| 		const journeys = [] | ||||
| 		const more = (when, journeysRef) => { | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ const request = (profile, data) => { | |||
| 		headers: { | ||||
| 			'Content-Type': 'application/json', | ||||
| 			'Accept-Encoding': 'gzip, deflate', | ||||
| 			'user-agent': 'https://github.com/derhuerst/hafas-client' | ||||
| 			'user-agent': 'https://github.com/public-transport/hafas-client' | ||||
| 		}, | ||||
| 		query: {} | ||||
| 	}) | ||||
|  |  | |||
|  | @ -16,9 +16,9 @@ | |||
| 	"contributors": [ | ||||
| 		"Julius Tens <mail@juliustens.eu>" | ||||
| 	], | ||||
| 	"homepage": "https://github.com/derhuerst/hafas-client", | ||||
| 	"repository": "derhuerst/hafas-client", | ||||
| 	"bugs": "https://github.com/derhuerst/hafas-client/issues", | ||||
| 	"homepage": "https://github.com/public-transport/hafas-client", | ||||
| 	"repository": "public-transport/hafas-client", | ||||
| 	"bugs": "https://github.com/public-transport/hafas-client/issues", | ||||
| 	"license": "ISC", | ||||
| 	"keywords": [ | ||||
| 		"hafas", | ||||
|  |  | |||
|  | @ -1,10 +1,10 @@ | |||
| 'use strict' | ||||
| 
 | ||||
| // todos from derhuerst/hafas-client#2
 | ||||
| // todos from public-transport/hafas-client#2
 | ||||
| // - stdStop.dPlatfS, stdStop.dPlatfR
 | ||||
| // todo: what is d.jny.dirFlg?
 | ||||
| // todo: d.stbStop.dProgType
 | ||||
| // todo: d.freq, d.freq.jnyL, see https://github.com/derhuerst/hafas-client/blob/9203ed1481f08baacca41ac5e3c19bf022f01b0b/parse.js#L115
 | ||||
| // todo: d.freq, d.freq.jnyL, see https://github.com/public-transport/hafas-client/blob/9203ed1481f08baacca41ac5e3c19bf022f01b0b/parse.js#L115
 | ||||
| 
 | ||||
| const createParseDeparture = (profile, stations, lines, remarks) => { | ||||
| 	const findRemark = rm => remarks[parseInt(rm.remX)] || null | ||||
|  |  | |||
|  | @ -11,8 +11,8 @@ HAFAS endpoint | wrapper library | docs | example code | source code | |||
| [Nahverkehrsverbund Schleswig-Holstein (NAH.SH)](https://de.wikipedia.org/wiki/Nahverkehrsverbund_Schleswig-Holstein) | [`nahsh-hafas`](https://github.com/juliuste/nahsh-hafas) | [docs](p/nahsh/readme.md) | [example code](p/nahsh/example.js) | [src](p/nahsh/index.js) | ||||
| 
 | ||||
| [](https://www.npmjs.com/package/hafas-client) | ||||
| [](https://travis-ci.org/derhuerst/hafas-client) | ||||
|  | ||||
| [](https://travis-ci.org/public-transport/hafas-client) | ||||
|  | ||||
| [](https://gitter.im/derhuerst) | ||||
| [](https://patreon.com/derhuerst) | ||||
| 
 | ||||
|  | @ -181,4 +181,4 @@ The returned [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript | |||
| 
 | ||||
| ## Contributing | ||||
| 
 | ||||
| If you **have a question**, **found a bug** or want to **propose a feature**, have a look at [the issues page](https://github.com/derhuerst/hafas-client/issues). | ||||
| If you **have a question**, **found a bug** or want to **propose a feature**, have a look at [the issues page](https://github.com/public-transport/hafas-client/issues). | ||||
|  |  | |||
|  | @ -95,7 +95,7 @@ const assertValidPrice = (t, p) => { | |||
| } | ||||
| 
 | ||||
| // todo: fix this upstream
 | ||||
| // see https://github.com/derhuerst/hafas-client/blob/c6e558be217667f1bcdac4a605898eb75ea80374/p/oebb/products.js#L71
 | ||||
| // see https://github.com/public-transport/hafas-client/blob/c6e558be217667f1bcdac4a605898eb75ea80374/p/oebb/products.js#L71
 | ||||
| const assertValidLine = (t, l) => { // with optional mode
 | ||||
| 	const validators = Object.assign({}, validateFptf.defaultValidators, { | ||||
| 		line: validateLineWithoutMode | ||||
|  |  | |||
|  | @ -19,7 +19,7 @@ const validateLineWithoutMode = (validate, line, name) => { | |||
| 	a.ok(line.name.length > 0, name + '.name can\'t be empty') | ||||
| 
 | ||||
| 	// skipping line validation here
 | ||||
| 	// see https://github.com/derhuerst/hafas-client/issues/8#issuecomment-355839965
 | ||||
| 	// see https://github.com/public-transport/hafas-client/issues/8#issuecomment-355839965
 | ||||
| 	if (is.undefined(line.mode) || is.null(line.mode)) { | ||||
| 		console.error(`ÖBB: Missing \`mode\` for line ${line.name} (at ${name}).`) | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue