2012-09-14 14 views
6

Mam komunikat bufora protokołu GTFS (VehiclePosition.pb) i odpowiadający format protokołu (gtfs-realtime.proto), chciałbym przeczytać komunikat w PHP samodzielnie (jest to możliwe?).Jak odczytać bufor protokołu GTFS w PHP?

Przyjrzałem się tutorialowi pytona Google https://developers.google.com/protocol-buffers/docs/pythontutorial i dokumentacji kodującej https://developers.google.com/protocol-buffers/docs/encoding i https://github.com/maxious/ACTBus-ui/tree/master/lib/Protobuf-PHP, ale mam naprawdę trudny konceptualizacji tego, co się dzieje. Myślę, że rozumiem, że gtfs-realtime.php jest skompilowanym zbiorem instrukcji kodowania zdefiniowanym w gtfs-realtime.proto (proszę poprawić mnie, jeśli się mylę), ale nie mam pojęcia, jak zmusić go do dekodowania VehiclePosition.pb. Jakie są również zależności od gtfs-realtime.php (lub odpowiednik python)? Czy jest coś jeszcze, co muszę skompilować, lub coś, co nie jest prostym skryptem php, jeśli wszystko, co chcę zrobić, to przeczytać VehiclePosition.pb?

Dzięki.

Odpowiedz

0

Chciałbym założyć coś na wzór tego fragmentu:

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

use DrSlump\Protobuf; 

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

pobrane ze strony człowieka: http://drslump.github.io/Protobuf-PHP/protobuf-php.3.html

Przed tym etapem, myślę, że trzeba wygenerować klasy PHP za pomocą CLI narzędzie jak opisano tutaj: http://drslump.github.io/Protobuf-PHP/protoc-gen-php.1.html

więc coś wzdłuż linii:

protoc-gen-php gtfs-realtime.proto 
1

Edmonscommerce i Julian są na dobrej drodze.

Jednak podążałem tą samą ścieżką i odkryłem, że implementacja protokołów buforowych PHP jest uciążliwa (szczególnie w przypadku kanału MTA NYCT).


Alternatywny sposób (Command Line + JSON):

Jeśli jesteś wygodne z narzędzi wiersza poleceń i JSON, pisałem samodzielne narzędzie, które konwertuje GTF-realtime w prosty JSON: https://github.com/harrytruong/gtfs_realtime_json

Wystarczy pobrać (bez instalacji) i uruchomić: gtfs_realtime_json <feed_url>

Oto sample JSON output.

Aby tego użyć w PHP, wystarczy umieścić gtfs_realtime_json w tym samym katalogu, skryptów i uruchom następujące:

<?php 

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

var_dump($feed); 
0

Sorry Harry Truong, próbowałem swój plik wykonywalny, ale zawsze zwraca NULL. Co robię źle?

Edycja: Problem polega na tym, że nie mam uprawnień do wykonania na moim serwerze. Dzięki za twój plik wykonywalny.