dev-master
9999999-devA parser for the ATOC data feed files.
MIT
The Requires
- php >=5.4.0
The Development Requires
by James Smith
atoc association of train operating companies uk rail uk train train feed parser
A parser for the ATOC data feed files.
This package allows you to parse the timetable and fares files contained within the ATOC data feed download available at http://data.atoc.org/data-download, (*1)
It does not parse files that are identified as not maintained in the ATOC specification document., (*2)
You can install this package through Composer. Add the following line to your composer.json require
object:, (*3)
"mczolko/atoc-feed-parser": "dev-master"
A field has been added to each record to help easily identify it, when using a Repository service for example. From the record identity it is possible to map the record to a table in your database. The record identity is constructed from the file extension followed by the RECORD_TYPE
if present., (*4)
To create information that is easier to consume some field names vary from the specification to keep them uniform, the table below details the field name to expect from this parser and which field that relates to in the specification., (*5)
Parser field | Timetable feed | Fares feed | Description |
---|---|---|---|
RECORD_TYPE | Record identity | RECORD_TYPE | Optionally included in the feed specification |
RECORD_IDENTITY | The identity given by this parser |
To get a parser object use the Factory based on the filename being parsed:, (*6)
$filename = "RJFAF570.NDF"; $factory = new \JCoded\ATOCFeedParser\Factory(); $parser = $factory->getParser($filename);
Then use the parser object to loop through each of the lines of the file., (*7)
while (($line = fgets($stream)) !== false) { //Skip the comments if (strpos($line, '/!!') !== false) { continue; } //Get the data try { $data = $parser->parseLine($line); //Do something with the data } catch (\JCoded\ATOCFeedParser\IncompatibleLineException $ex) { //Handle exception } }
The parser will return an associative array with a key equal to the field name in the specification document, see the example below. The specification documents can be found on the ATOC site., (*8)
[ 'TICKET_CODE' => '0AW', 'RESTRICTION_CODE' => 'SV', 'RESTRICTION_FLAG' => '0', 'TOC_ID' => 'SN', 'END_DATE' => '31122999', 'START_DATE' => '30042013', 'CHECK_TYPE' => '2', 'AP_DATA' => '00000001', 'BOOKING_TIME' => '1800', 'RECORD_IDENTITY' => 'TAP' ]
There are a some interfaces to use when injecting dependencies into your classes., (*9)
The interface for the Factory:, (*10)
\JCoded\ATOCFeedParser\ParserFactoryInterface
The interface for the returned parser:, (*11)
\JCoded\ATOCFeedParser\File\ParserInterface
A parser for the ATOC data feed files.
MIT
atoc association of train operating companies uk rail uk train train feed parser