Ce SDK permet aux développeurs d'utiliser plus facilement les données GTFS dans leurs projets PHP. En ce moment, seuls les fichiers statiques sont pris en charge.
Vous pouvez installer ce package via le compositeur
composer require trafiklab/gtfs-php-sdk
Ouverture d'un fichier GTFS
Vous pouvez soit charger un fichier zip GTFS local, soit le télécharger sur http
$ gtfsArchive = GtfsArchive:: createFromPath ( " gtfs.zip " );
$ gtfsArchive = GtfsArchive:: createFromUrl ( " http://example.com/gtfs.zip " );Facultativement, vous pouvez choisir de télécharger un fichier ZIP GTFS uniquement s'il a changé depuis la dernière récupération. Ceci est utile lorsque vous essayez d'automatiser les récupérations GTFS qui doivent être stockées dans une base de données, sans réécrire constamment les mêmes données à chaque fois. Les en-têtes HTTP suivants sont utilisés:
La plupart des agences fournissent un en-tête dernier modifié, mais s'il n'est pas présent, ETAG est la meilleure voie à suivre. Si, pour une raison quelconque, ETAG n'est pas non plus fourni, il continuera simplement normalement comme si vous deviez utiliser la méthode GTFSarchive :: CreateFromurl () d'origine.
$ gtfsArchive = GtfsArchive:: createFromUrlIfModified (
" http://example.com/gtfs.zip " ,
" Wed, 10 Jun 2020 15:56:14 GMT " ,
" 99fa-5a7bce236c526 "
);Si vous n'avez pas de valeur ETAG ou dernière modification pour commencer, laissez-les simplement de côté et la méthode les récupérera pour vous.
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
}
}
Les fichiers sont extraits dans un répertoire temporaire (/ TMP / GTFS /) et nettoyés lorsque l'objet GTFSarchive est détruit. Vous pouvez appeler $gtfsArchive->deleteUncompressedFiles() pour supprimer manuellement les fichiers non compressés.
Lire un fichier
$ 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
. . . Tous les fichiers sont chargés et mis en cache paresseux. Cela signifie que les données ne sont chargées qu'après avoir appelé une méthode telle que getStopTimesFile() . Gardez à l'esprit qu'en peut prendre un certain temps pour lire les données pour la première fois. Il peut prendre jusqu'à une minute pour lire un grand fichier stop_times.txt .
Lecture des données du fichier
Chaque classe de fichiers contient une méthode pour lire toutes les données de ce fichier. Certaines classes contiennent des méthodes d'assistance supplémentaires pour les requêtes fréquemment utilisées telles que le filtrage par un ID ou une clé étrangère.
Il y a une classe PHP pour chaque fichier (pris en charge) et une autre classe pour les données contenues dans une ligne de ce fichier. La définition de chaque champ est contenue dans le PHPDOC pour chaque fonction Getter, vous permettant de vous concentrer sur le codage, et moins sur l'alt-tour entre la spécification et le code.
$ 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 Nous acceptons les demandes de traction, mais veuillez d'abord créer un problème afin de discuter de l'ajout ou de la correction. Si vous souhaitez voir une nouvelle fonctionnalité ajoutée, vous pouvez également créer une demande de fonctionnalité en créant un problème.
Si vous êtes coincé avec une question, n'hésitez pas à demander de l'aide via le tracker du problème.