Этот SDK облегчает разработчикам использовать данные GTFS в своих проектах PHP. В этот момент поддерживаются только статические файлы.
Вы можете установить этот пакет через композитор
composer require trafiklab/gtfs-php-sdk
Открытие файла GTFS
Вы можете загрузить локальный zip -файл GTFS, либо загрузить его на HTTP
$ gtfsArchive = GtfsArchive:: createFromPath ( " gtfs.zip " );
$ gtfsArchive = GtfsArchive:: createFromUrl ( " http://example.com/gtfs.zip " );При желании вы можете загрузить zip -файл GTFS только в том случае, если он изменился с момента последнего поиска. Это полезно при попытке автоматизировать поиск GTFS, которые необходимо хранить в базе данных, не постоянно переписывая одни и те же данные каждый раз. Используются следующие заголовки HTTP:
Большинство агентств предоставляют последний модифицированный заголовок, но если его нет, ETAG-лучший путь. Если по какой -то причине ETAG также не предоставлен, он просто продолжится нормально, как если бы вы использовали исходный метод GTFSARCHIVE :: CreateFromUrl ().
$ gtfsArchive = GtfsArchive:: createFromUrlIfModified (
" http://example.com/gtfs.zip " ,
" Wed, 10 Jun 2020 15:56:14 GMT " ,
" 99fa-5a7bce236c526 "
);Если у вас нет значения ETAG или последних модифицированных с самого начала, просто оставьте их, и этот метод будет извлекать их для вас.
if ( $ gtfsArchive = GtfsArchive:: createFromUrlIfModified ( " http://example.com/gtfs.zip " ) {
// Get Methods return null if GTFS Url does not contain the specified Header: ETag, Last-Modified.
$ lastModified = $ gtfsArchive -> getLastModified (); // Wed, 10 Jun 2020 15:56:14 GMT | null
$ eTag = $ gtfsArchive -> getETag (); // "99fa-5a7bce236c526" | null
// You can get the Last-Modified datetime PHP Object (Useful for storing in databases) by doing the following:
$ datetime = $ gtfsArchive ->getLastModifiedDateTime() // DateTime Object | null
// Or Convert it back to a String using the standard Last-Modified HTTP header format.
if ( $ datetime ) {
$ lastModified = GtfsArchive:: getLastModifiedFromDateTime ( $ datetime ); // Wed, 10 Jun 2020 15:56:14 GMT
}
}
Файлы извлекаются во временный каталог (/TMP/GTFS/) и очищаются, когда объект GTFSHARCHIVE разрушен. Вы можете позвонить в $gtfsArchive->deleteUncompressedFiles() чтобы вручную удалить несжатые файлы.
Чтение файла
$ agencyTxt = $ gtfsArchive -> getAgencyFile (); // read agency.txt
$ calendarTxt = $ gtfsArchive -> getCalendarFile (); // read calendar.txt
$ routesTxt = $ gtfsArchive -> getRoutesFile (); // read routes.txt
$ stopTimesTxt = $ gtfsArchive -> getStopTimesFile (); // read stop_times.txt
. . . Все файлы ленивы загружены и кэшируются. Это означает, что данные загружаются только после вызова такого метода, как getStopTimesFile() . Имейте в виду, что в первый раз может занять некоторое время, чтобы прочитать данные. Это может занять до минуты, чтобы прочитать большой файл stop_times.txt .
Чтение данных файлов
Каждый класс файла содержит метод для чтения всех данных в этом файле. Некоторые классы содержат дополнительные вспомогательные методы для часто используемых запросов, таких как фильтрация с помощью идентификатора или иностранного ключа.
Существует один класс PHP для каждого (поддерживаемого) файла и другой класс для данных, содержащихся в одной строке этого файла. Определение каждого поля содержится в PHPDOC для каждой функции Getter, что позволяет вам сосредоточиться на кодировании, и меньше на Alt-Tabing между спецификацией и кодом.
$ stopTimesTxt = $ gtfsArchive -> getStopTimesFile (); // The file is represented by a StopTimesFile object
$ allStopTimes = $ stopTimesTxt -> getStopTimes (); // a method like this is always available
$ stopTimesForStopX = $ stopTimesTxt -> getStopTimesForStop ( $ stopId ); // this is a helper method for foreign keys
$ stopTime = $ allStopTimes [ 0 ]; // Get the first row
$ headsign = $ stopTime -> getStopHeadsign (); // One row of data is represented by a StopTime object Мы принимаем запросы на привлечение, но сначала создайте проблему, чтобы обсудить сложение или исправление. Если вы хотите, чтобы добавлена новая функция, вы также можете создать запрос функции, создав проблему.
Если вы застряли с вопросом, не стесняйтесь просить помощь через трекер выпуска.