Este SDK facilita para os desenvolvedores usarem dados do GTFS em seus projetos PHP. Neste momento, apenas arquivos estáticos são suportados.
Você pode instalar este pacote através do compositor
composer require trafiklab/gtfs-php-sdk
Abrindo um arquivo GTFS
Você pode carregar um arquivo zip GTFS local ou pode baixá -lo sobre HTTP
$ gtfsArchive = GtfsArchive:: createFromPath ( " gtfs.zip " );
$ gtfsArchive = GtfsArchive:: createFromUrl ( " http://example.com/gtfs.zip " );Opcionalmente, você pode optar por baixar um arquivo zip GTFS apenas se ele tiver alterado desde a última recuperação. Isso é útil ao tentar automatizar as recuperações do GTFS que precisam ser armazenadas em um banco de dados, sem reescrever constantemente os mesmos dados a cada vez. Os seguintes cabeçalhos HTTP são usados:
A maioria das agências fornece um cabeçalho de última hora, mas se não estiver presente, o ETAG é o melhor caminho a seguir. Se, por algum motivo, o ETAG também não for fornecido, ele continuará normalmente como se você usasse o método original GTFSarchive :: createfromurl ().
$ gtfsArchive = GtfsArchive:: createFromUrlIfModified (
" http://example.com/gtfs.zip " ,
" Wed, 10 Jun 2020 15:56:14 GMT " ,
" 99fa-5a7bce236c526 "
);Se você não tiver um ETAG ou valor de última hora, basta deixá-los de fora e o método os recuperará para você.
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
}
}
Os arquivos são extraídos para um diretório temporário (/tmp/gtfs/) e limpos quando o objeto GTFSarchive é destruído. Você pode chamar $gtfsArchive->deleteUncompressedFiles() para remover manualmente os arquivos não compactados.
Lendo um arquivo
$ 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
. . . Todos os arquivos são carregados e cache preguiçosos. Isso significa que os dados são carregados apenas após chamar um método como getStopTimesFile() . Lembre -se de que pode demorar um pouco para ler os dados pela primeira vez. Pode levar até um minuto para ler um grande arquivo stop_times.txt .
Lendo dados do arquivo
Cada classe de arquivo contém um método para ler todos os dados nesse arquivo. Algumas classes contêm métodos auxiliares adicionais para consultas usadas frequentemente, como filtragem por um ID ou chave estrangeira.
Há uma classe PHP para todos os arquivos (suportados) e outra classe para os dados contidos em uma linha desse arquivo. A definição de cada campo está contida no PHPDOC para cada função Getter, permitindo que você se concentre na codificação e menos na batida alternativa entre especificação e código.
$ 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 Aceitamos solicitações de tração, mas crie um problema primeiro para discutir a adição ou correção. Se você deseja ver um novo recurso adicionado, também pode criar uma solicitação de recurso criando um problema.
Se você estiver preso a uma pergunta, fique à vontade para pedir ajuda através do rastreador de problemas.