2012-09-14 39 views
6

Tengo un mensaje de buffer de protocolo GTFS (VehiclePosition.pb), y el formato de protocolo correspondiente (gtfs-realtime.proto), me gustaría leer el mensaje solo en PHP (¿eso es posible?).¿Cómo se lee el búfer de protocolo GTFS en PHP?

Miré el tutorial de python de Google https://developers.google.com/protocol-buffers/docs/pythontutorial y la documentación de codificación https://developers.google.com/protocol-buffers/docs/encoding y https://github.com/maxious/ACTBus-ui/tree/master/lib/Protobuf-PHP, pero estoy teniendo un momento muy difícil para conceptualizar lo que está sucediendo. Creo que entiendo que gtfs-realtime.php es un conjunto de instrucciones compiladas de la codificación definida en gtfs-realtime.proto (corrígeme si me equivoco), pero no tengo ni idea de cómo decodificar VehiclePosition.pb. Además, ¿cuáles son las dependencias de gtfs-realtime.php (o el equivalente de python para el caso)? ¿Hay algo más que tengo que compilar yo mismo o algo que no sea una simple secuencia de comandos php si todo lo que quiero hacer es leer VehiclePosition.pb?

Gracias.

Respuesta

0

quiero suponer algo en la línea de este fragmento:

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

use DrSlump\Protobuf; 

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

, tomada de la página man: http://drslump.github.io/Protobuf-PHP/protobuf-php.3.html

Antes de ese paso, creo que es necesario para generar sus clases PHP utilizando la CLI herramienta como se describe aquí: http://drslump.github.io/Protobuf-PHP/protoc-gen-php.1.html

así que algo a lo largo de las líneas de:

protoc-gen-php gtfs-realtime.proto 
1

edmonscommerce y Julian están en el camino correcto.

Sin embargo, he seguido el mismo camino y he encontrado que la implementación PHP de Protocol Buffers es engorrosa (especialmente en el caso del feed MTA de NYCT).


Método Alternativo (línea de comandos + JSON):

Si se siente cómodo con las herramientas de línea de comandos y JSON, escribí una herramienta independiente que convierte GTFS en tiempo real en simples JSON: https://github.com/harrytruong/gtfs_realtime_json

Simplemente descargue (sin instalar), y ejecute: gtfs_realtime_json <feed_url>

Aquí hay un sample JSON output.

usar esto en PHP, sólo hay que poner gtfs_realtime_json en el mismo directorio que las secuencias de comandos y ejecute el siguiente:

<?php 

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

var_dump($feed); 
0

Lo sentimos Harry Truong, probé su ejecutable pero vuelve siempre es NULL. ¿Qué estoy haciendo mal?

Editar: El problema es que no tengo permiso para ejecutar en mi servidor. Gracias por tu ejecutable.

Cuestiones relacionadas