2017-10-27 36 views
0

* .pbファイルを読む必要があります。私はこのパイソンライブラリhttps://github.com/google/gtfs-realtime-bindingsを見て、.pbファイルを人間が読める形式に解析することができると思われます。オブジェクトをバイナリにシリアル化することもできます.pbGTFS-RT protobufメッセージをPythonで反復して編集する

私の問題は、メッセージをナビゲートするのが難しいことです。

私はそのようにロードします。私は2つの問題を抱えて

feed = gtfs_realtime_pb2.FeedMessage() 
response = requests.get(url) 
feed.ParseFromString(response.content) 
message=feed.entity 

for item in message:   
     if item.id==trip_id: 
      if item.HasField('trip_update'): 
       #do something with the item's fields 

: 私は「trip_update」に含まれるサブフィールドを反復してもvalues.Specificallyを変更したいが、内部stop_time_updatesの数があります私は変更したい。そう

id: "61443658" 
trip_update { 
    trip { 
    trip_id: "61443658" 
    start_time: "16:19:00" 
    start_date: "20171027" 
    schedule_relationship: SCHEDULED 
    route_id: "17529" 
    direction_id: 0 
    } 
    stop_time_update { 
    departure { 
     delay: 0 
     time: 1509113940 
    } 
    stop_id: "54376" 
    schedule_relationship: SCHEDULED 
    } 
    stop_time_update { 
    arrival { 
     delay: 0 
     time: 1509114240 
    } 
    departure { 
     delay: 0 
     time: 1509114240 
    } 
    stop_id: "54633" 
    schedule_relationship: SCHEDULED 

同様

はその後、私は単純にファイルをシリアル化。 このフィードエンティティオブジェクトをナビゲートするための利用可能な方法はありません。上記を行うには何らかの方法があり、それを逃してしまった場合は、私に知らせてください。そうでない場合は、私がしたいことのための適切なツールの正しい方向に私を向けることができれば、私は感謝します。

歓声

答えて

0

あなたが作りたい変更正確に何を指定していないので、以下のコードサンプルでは、​​30秒にStopTimeEvents(発着)のそれぞれについて、delayフィールドを変更したいを前提としています。注:私はこのコードを実際にテストしていません。ところで

feed = gtfs_realtime_pb2.FeedMessage() 
response = requests.get(url) 
feed.ParseFromString(response.content) 
message = feed.entity 

for item in message:   
    if not item.HasField('trip_update'): 
     continue 
    tu = item.trip_update 
    for stu in tu.stop_time_update: ## Loop over the stop_time_update repeated element 
     if stu.HasField('arrival'): 
      stu.arrival.delay = 30 
     if stu.HasField('departure'): 
      stu.departure.delay = 30 

、あなただけのいくつかの外部のフィードジェネレータのAPIを消費しているように見えますので、あなたが値を変更するだけではなく、それらを読みたいと思いますなぜそれが私にははっきりしていません。

+0

もし何かがあれば、おそらくStopTimeUpdatesを反復し、使用されているgtfsリアルタイムjarへのリンクを見つけるためのJavaの例を提供することができます – paulh