Este SDK facilita a los desarrolladores usar datos GTFS en sus proyectos PHP. En este momento, solo se admiten archivos estáticos.
Puede instalar este paquete a través del compositor
composer require trafiklab/gtfs-php-sdk
Abrir un archivo GTFS
Puede cargar un archivo zip GTFS local o puede descargarlo a través de HTTP
$ gtfsArchive = GtfsArchive:: createFromPath ( " gtfs.zip " );
$ gtfsArchive = GtfsArchive:: createFromUrl ( " http://example.com/gtfs.zip " );Opcionalmente, puede elegir descargar un archivo GTFS Zip solo si ha cambiado desde la última recuperación. Esto es útil cuando se intenta automatizar las recuperaciones GTFS que deben almacenarse dentro de una base de datos, sin reescribir constantemente los mismos datos cada vez. Se utilizan los siguientes encabezados HTTP:
La mayoría de las agencias proporcionan un último encabezado modificado, pero si no está presente, Etag es la mejor ruta para llevar. Si por alguna razón tampoco se proporciona ETAG, continuará normalmente como si tuviera que usar el método original GTFSarchive :: CreateFromURL ().
$ gtfsArchive = GtfsArchive:: createFromUrlIfModified (
" http://example.com/gtfs.zip " ,
" Wed, 10 Jun 2020 15:56:14 GMT " ,
" 99fa-5a7bce236c526 "
);Si no tiene un valor ETAG o el último valor modificado para empezar, simplemente déjelos fuera y el método los recuperará para usted.
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
}
}
Los archivos se extraen a un directorio temporal (/TMP/GTFS/), y se limpian cuando se destruye el objeto GTFSARCHIVE. Puede llamar a $gtfsArchive->deleteUncompressedFiles() para eliminar manualmente los archivos sin comprimir.
Leyendo un archivo
$ 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 los archivos son cargados y almacenados en caché. Esto significa que los datos solo se cargan después de llamar a un método como getStopTimesFile() . Tenga en cuenta que puede tomar un tiempo leer los datos por primera vez. Puede tomar hasta un minuto leer un archivo grande stop_times.txt .
Datos de lectura del archivo
Cada clase de archivo contiene un método para leer todos los datos en ese archivo. Algunas clases contienen métodos auxiliares adicionales para consultas de uso frecuente, como el filtrado por una identificación o una clave extranjera.
Hay una clase PHP para cada archivo (compatible) y otra clase para los datos contenidos en una fila de ese archivo. La definición de cada campo está contenida en el PHPDOC para cada función de Getter, lo que le permite concentrarse en la codificación, y menos en la tabla de alt entre especificaciones y 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 Aceptamos solicitudes de extracción, pero primero cree un problema para discutir la adición o la solución. Si desea ver una nueva función agregada, también puede crear una solicitud de función creando un problema.
Si está atrapado con una pregunta, no dude en pedir ayuda a través del rastreador de problemas.