2012-09-14 45 views
6

我有一个GTFS协议缓冲区消息(VehiclePosition.pb)和相应的协议格式(gtfs-realtime.proto),我想单独在PHP中读取消息(这甚至有可能吗?)。如何在PHP中读取GTFS协议缓冲区?

我看着谷歌的python教程https://developers.google.com/protocol-buffers/docs/pythontutorial和编码文档https://developers.google.com/protocol-buffers/docs/encodinghttps://github.com/maxious/ACTBus-ui/tree/master/lib/Protobuf-PHP,但我很难概念化正在发生的事情。我想我明白gtfs-realtime.php是在gtfs-realtime.proto中定义的编码的编译指令集(请纠正我,如果我错了),但我不知道如何获取它解码VehiclePosition.pb。另外,gtfs-realtime.php(或者python相当于这个问题)的依赖是什么?如果我想要做的只是阅读VehiclePosition.pb,还有什么我不得不编译自己或任何不是简单的PHP脚本的东西?

谢谢。

回答

0

我会假设沿着这个片段线的东西:

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

use DrSlump\Protobuf; 

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

从该名男子页采取:http://drslump.github.io/Protobuf-PHP/protobuf-php.3.html

那一步之前,我想你需要生成使用CLI PHP类这里描述的工具:http://drslump.github.io/Protobuf-PHP/protoc-gen-php.1.html

所以沿着线的东西:

protoc-gen-php gtfs-realtime.proto 
1

edmonscommerce和朱利安在正确的轨道上。但是,我走了相同的路径,我发现协议缓冲区的PHP实现很麻烦(特别是在NYCT的MTA feed中)。


其他方法(命令行+ JSON):

如果您熟悉命令行工具和JSON,我写了一个独立的工具,GTFS实时转换成简单的JSON:https://github.com/harrytruong/gtfs_realtime_json

只需下载(不安装),然后运行:gtfs_realtime_json <feed_url>

这里是sample JSON output

在PHP利用这一点,只是把gtfs_realtime_json在相同的目录中的脚本,并运行以下命令:

<?php 

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

var_dump($feed); 
0

对不起哈利张庭,我想你的可执行文件,但它总是返回NULL。 我做错了什么?

编辑:问题是我没有权限在我的服务器上执行。感谢您的可执行文件。