2012-09-14 19 views
6

Ho un messaggio del buffer del protocollo GTFS (VehiclePosition.pb) e il formato del protocollo corrispondente (gtfs-realtime.proto), mi piacerebbe leggere il messaggio solo in PHP (è anche possibile?).Come leggere il buffer del protocollo GTFS in PHP?

ho guardato di Google Python Tutorial https://developers.google.com/protocol-buffers/docs/pythontutorial e la codifica della documentazione https://developers.google.com/protocol-buffers/docs/encoding e https://github.com/maxious/ACTBus-ui/tree/master/lib/Protobuf-PHP, ma io sto avendo un momento davvero difficile concettualizzare che cosa sta succedendo. Penso di capire che gtfs-realtime.php è un insieme di istruzioni compilato della codifica definita in gtfs-realtime.proto (correggimi se ho torto), ma non ho idea di come ottenerlo per decodificare VehiclePosition.pb. Inoltre, quali sono le dipendenze di gtfs-realtime.php (o l'equivalente python per quella materia)? C'è qualcos'altro che devo compilare da solo o qualcosa che non sia un semplice script php se tutto quello che voglio fare è leggere VehiclePosition.pb?

Grazie.

risposta

0

Vorrei assumere qualcosa sulla falsariga di questo frammento:

<?php 
require_once 'DrSlump\Protobuf.php'; 

use DrSlump\Protobuf; 

$data = file_get_contents('data.pb'); 
$person = new Tutorial\Person($data); 
echo $person->getName(); 

come presa dalla pagina man: http://drslump.github.io/Protobuf-PHP/protobuf-php.3.html

Prima di questo passo, penso che è necessario generare le vostre classi PHP utilizzando il CLI strumento come descritto qui: http://drslump.github.io/Protobuf-PHP/protoc-gen-php.1.html

quindi qualcosa sulla falsariga di:

protoc-gen-php gtfs-realtime.proto 
1

edmonscommerce e Julian sono sulla strada giusta.

Tuttavia, ho seguito lo stesso percorso e ho scoperto che l'implementazione di PHP di Protocol Buffers è ingombrante (specialmente nel caso del feed MTA di NYCT).


Metodo alternativo (Command Line + JSON):

Se sei a tuo agio con gli strumenti della riga di comando e JSON, ho scritto uno strumento autonomo che converte GTFS-tempo reale in semplici JSON: https://github.com/harrytruong/gtfs_realtime_json

Basta scaricare (senza installazione) ed eseguire: gtfs_realtime_json <feed_url>

Ecco uno sample JSON output.

di utilizzare questo in PHP, appena messo gtfs_realtime_json nella stessa directory come i vostri script, ed eseguire i seguenti:

<?php 

$json = exec('./gtfs_realtime_json "http://developer.mbta.com/lib/GTRTFS/Alerts/VehiclePositions.pb"'); 
$feed = json_decode($json, TRUE); 

var_dump($feed); 
0

spiacenti Harry Truong, ho provato il vostro eseguibile ma restituisce sempre NULL. Cosa sto facendo male?

Modifica: il problema è che non ho il permesso di eseguire sul mio server. Grazie per il tuo eseguibile.

Problemi correlati