Как читать буфер протокола GTFS в PHP?

У меня есть буферное сообщение протокола GTFS (VehiclePosition.pb) и соответствующий формат протокола (gtfs-realtime.proto), я хотел бы прочитать сообщение только на PHP (это возможно?).

Я просмотрел учебник по python Google https://developers.google.com/protocol-buffers/docs/pythontutorial и документацию по кодированию https://developers.google.com/protocol-buffers/docs/encoding и https: // github. com / maxious / ACTBus-ui / tree / master / lib / Protobuf-PHP , но мне очень сложно понять , что происходит. Я думаю, что я понимаю, что gtfs-realtime.php – это скомпилированный набор команд для кодировки, определенный в gtfs-realtime.proto (пожалуйста, исправьте меня, если я ошибаюсь), но я не знаю, как заставить его декодировать VehiclePosition.pb. Кроме того, каковы зависимости gtfs-realtime.php (или эквивалент python в этом отношении)? Есть ли что-нибудь еще, что я должен скомпилировать самостоятельно или что-то, что не является простым скриптом php, если все, что я хочу сделать, это прочитать VehiclePosition.pb?

Благодарю.

Solutions Collecting From Web of "Как читать буфер протокола GTFS в PHP?"

Вы можете использовать официальный инструмент: https://developers.google.com/transit/gtfs-realtime/code-samples#php

Он был выпущен совсем недавно. Я использую его в течение нескольких дней и работает как шарм.

edmonscommerce и Julian находятся на правильном пути.

Тем не менее, я пошел по тому же пути, и я обнаружил, что реализация протоколов протоколов PHP является громоздкой (особенно в случае с лентой MTA NYCT).


Альтернативный метод (Командная строка + 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); 

Я бы предположил что-то вроде этого фрагмента:

 <?php require_once 'DrSlump\Protobuf.php'; use DrSlump\Protobuf; $data = file_get_contents('data.pb'); $person = new Tutorial\Person($data); echo $person->getName(); 

как взято с man-страницы: http://drslump.github.io/Protobuf-PHP/protobuf-php.3.html

До этого шага, я думаю, вам нужно сгенерировать ваши классы PHP с помощью инструмента CLI, как описано здесь: http://drslump.github.io/Protobuf-PHP/protoc-gen-php.1.html

поэтому что-то вроде:

 protoc-gen-php gtfs-realtime.proto 

Извините, Гарри Труонг, я попробовал ваш исполняемый файл, но он всегда возвращает NULL. Что я делаю неправильно?

Изменить: проблема в том, что у меня нет разрешения на выполнение на моем сервере. Спасибо за ваш исполняемый файл.