3

New York City Subway Realtime GTFS Feedsを見ようとしています。いろいろ読んだ後、プロトコルバッファについて学び、protocコンパイラをインストールしました。

New York City Transit にはnyct-subway.proto.txt、最初の行にNYCT Subway extensions for the GTFS-realtime protocolと書かれているファイルがあります。これはと組み合わせることになっていgtfs-realtime-protoますか?2 つのプロトコル バッファを別々にコンパイルしたところ、次の警告が表示されました。

[libprotobuf WARNING google/protobuf/compiler/parser.cc:471] 
No syntax specified for the proto file. 
Please use 'syntax = "proto2";' or 'syntax = "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)

protocPython では、ライブラリが作成したものを呼び出す行を書きました。

import gtfs_realtime_pb2, nyct_subway_pb2

import google.protobuf以前のインストール作業にもかかわらず、Python はSo it doについて何も知りませんでしsudo pip install protobufた。

この時点では、まだデータを読み取っていませんhttp://datamine.mta.info/mta_esi.php?key=<key>&feed_id=1。読み取れない gtfs ファイルを取得できます。

これを組み合わせて GTFS ファイルからデータを読み取るにはどうすればよいですか?

4

2 に答える 2

2

ジェイミーのコメントをさらに明確にするために、次のようなことができるはずです。

import urllib2
import gtfs_realtime_pb2, nyct_subway_pb2

... 

    // initialize the feed parser
    feed = gtfs_realtime_pb2.FeedMessage()

    // fetch the raw gtfs-realtime feed
    gtfs_raw = urllib2.urlopen("http://datamine.mta.info/mta_esi.php?key=<key>&feed_id=1").read()

    // parse the raw feed
    feed.ParseFromString(gtfs_raw)

    // access the data structure as needed
    print feed.header.timestamp
    print feed.header.gtfs_realtime_version

    for entity in feed.entity:
        // etc.

別の方法 (コマンドライン + JSON)

個人的には、プロトコル バッファと gtfs-realtime は面倒だと思います。この作業をスキップするために、GTFS リアルタイムを JSON に変換するスタンドアロン ツールを作成しました:
https://github.com/harrytruong/gtfs_realtime_json

ダウンロード(インストールなし)して実行するだけです:gtfs_realtime_json <feed_url>

JSON 出力の例を次に示します。

于 2015-02-25T07:20:25.870 に答える
0

protobufPython パッケージを使用して、この 2 つを組み合わせることができます。.proto両方のファイルをダウンロードして に配置し、出力用のフォルダーをdocs/gtfs_proto作成してから実行します。gtfs_proto

export SRC_DIR=docs/gtfs_proto
export DST_DIR=gtfs_proto
protoc -I=$SRC_DIR --python_out=$DST_DIR $SRC_DIR/nyct-subway.proto
于 2016-10-26T02:14:15.677 に答える