2012-09-14 18 views
6

Tôi có một thông báo đệm giao thức GTFS (VehiclePosition.pb) và định dạng giao thức tương ứng (gtfs-realtime.proto), tôi muốn đọc thư trong PHP một mình (thậm chí có thể không?).Làm thế nào để đọc bộ đệm giao thức GTFS trong PHP?

Tôi đã xem hướng dẫn python của Google https://developers.google.com/protocol-buffers/docs/pythontutorial và tài liệu mã hóa https://developers.google.com/protocol-buffers/docs/encodinghttps://github.com/maxious/ACTBus-ui/tree/master/lib/Protobuf-PHP, nhưng tôi đang có một thời gian thực sự khó khăn để khái niệm những gì đang diễn ra. Tôi nghĩ rằng tôi hiểu rằng gtfs-realtime.php là một tập lệnh được biên dịch của mã hóa được định nghĩa trong gtfs-realtime.proto (hãy sửa tôi nếu tôi sai), nhưng tôi không biết làm thế nào để giải mã phương thức VehiclePosition.pb. Ngoài ra, phụ thuộc của gtfs-realtime.php (hoặc tương đương python cho vấn đề đó) là gì? Có bất cứ điều gì khác tôi phải biên dịch bản thân mình hoặc bất cứ điều gì mà không phải là một kịch bản php đơn giản nếu tất cả tôi muốn làm là đọc VehiclePosition.pb?

Cảm ơn.

Trả lời

0

tôi sẽ giả định một cái gì đó dọc theo dòng của đoạn này:

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

use DrSlump\Protobuf; 

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

như lấy từ trang người đàn ông: http://drslump.github.io/Protobuf-PHP/protobuf-php.3.html

Trước khi bước đó, tôi nghĩ rằng bạn cần phải tạo ra các lớp học PHP của bạn bằng cách sử dụng CLI công cụ như đã mô tả ở đây: http://drslump.github.io/Protobuf-PHP/protoc-gen-php.1.html

nên một cái gì đó dọc theo dòng:

protoc-gen-php gtfs-realtime.proto 
1

edmonscommerce và Julian đang đi đúng hướng.

Tuy nhiên, tôi đã đi xuống cùng một đường dẫn và tôi đã thấy rằng việc thực hiện PHP Protocol Buffers là cồng kềnh (đặc biệt là trong trường hợp nguồn cấp dữ liệu MTA của NYCT).


Alternative Method (Command Line + JSON):

Nếu bạn cảm thấy thoải mái với các công cụ dòng lệnh và JSON, tôi đã viết một công cụ độc lập có thể chuyển đổi GTFS-thời gian thực vào JSON đơn giản: https://github.com/harrytruong/gtfs_realtime_json

Chỉ cần tải xuống (không cài đặt) và chạy: gtfs_realtime_json <feed_url>

Đây là sample JSON output.

Để sử dụng điều này trong PHP, chỉ cần đặt gtfs_realtime_json trong cùng thư mục như kịch bản của bạn, và chạy như sau:

<?php 

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

var_dump($feed); 
0

Xin lỗi Harry Truong, tôi đã cố gắng thực thi của bạn, nhưng nó sẽ trả về luôn NULL. Tôi đang làm gì sai?

Chỉnh sửa: Vấn đề là tôi không có quyền thực thi trong máy chủ của mình. Cảm ơn bạn đã thực thi.