У меня есть буферное сообщение протокола 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?
Благодарю.
Вы можете использовать официальный инструмент: https://developers.google.com/transit/gtfs-realtime/code-samples#php
Он был выпущен совсем недавно. Я использую его в течение нескольких дней и работает как шарм.
edmonscommerce и Julian находятся на правильном пути.
Тем не менее, я пошел по тому же пути, и я обнаружил, что реализация протоколов протоколов PHP является громоздкой (особенно в случае с лентой MTA NYCT).
Если вам удобны инструменты командной строки и 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. Что я делаю неправильно?
Изменить: проблема в том, что у меня нет разрешения на выполнение на моем сервере. Спасибо за ваш исполняемый файл.