【问题标题】:How to read GTFS protocol buffer in PHP?如何在 PHP 中读取 GTFS 协议缓冲区?
【发布时间】:2012-09-08 01:26:22
【问题描述】:

我有一个 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 脚本的东西吗?

谢谢。

【问题讨论】:

    标签: php protocol-buffers gtfs


    【解决方案1】:

    我会假设与这个 sn-p 类似:

    <?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
    

    【讨论】:

      【解决方案2】:

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

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

      【解决方案3】:

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

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


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

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

      只需下载(无需安装),然后运行:gtfs_realtime_json &lt;feed_url&gt;

      这是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);
      

      【讨论】:

        【解决方案4】:

        抱歉,Harry Truong,我尝试了您的可执行文件,但它始终返回 NULL。 我做错了什么?

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-18
          • 2021-12-19
          • 2011-11-15
          • 1970-01-01
          相关资源
          最近更新 更多