8

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

我查看了 Google 的 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 脚本的东西吗?

谢谢。

4

4 回答 4

2

edmonscommerce 和 Julian 走在正确的轨道上。

然而,我走了同样的路,我发现协议缓冲区的 PHP 实现很麻烦(尤其是在 NYCT 的 MTA 提要的情况下)。


替代方法(命令行+ JSON):

如果您对命令行工具和 JSON 感到满意,我编写了一个将 GTFS-realtime 转换为简单 JSON 的独立工具:https ://github.com/harrytruong/gtfs_realtime_json

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

这是一个示例 JSON 输出

要在 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);
于 2015-02-25T07:48:10.263 回答
1

可以使用官方工具:https ://developers.google.com/transit/gtfs-realtime/code-samples#php

它是最近发布的。我已经使用它几天了,效果很好。

于 2015-02-23T21:33:27.220 回答
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
于 2015-01-21T15:22:38.663 回答
0

抱歉,Harry Truong,我试过你的可执行文件,但它总是返回 NULL。我做错了什么?

编辑:问题是我无权在我的服务器中执行。感谢您的可执行文件。

于 2015-04-13T08:03:57.430 回答