Golang GTFS-realtime Language Bindings¶
GTFS-realtime Protocol Buffer 仕様から生成された Golang structs を提供します。これらの structs により、バイナリ Protocol Buffer GTFS-realtime データフィードを Golang オブジェクトに解析することができます。
依存関係を追加する¶
自身のプロジェクトで gtfs-realtime-bindings 構造体を使用するには、まず以下を使用してこのライブラリをインストールする必要があります。
go get github.com/MobilityData/gtfs-realtime-bindings/golang/gtfs
また、以下を使用して golang protobuf ライブラリの依存関係をインストールします。
go get google.golang.org/protobuf/proto
コード例¶
以下のコードスニペットは、特定の URL から GTFS-realtime データフィードをダウンロードし、それを FeedMessage(GTFS-realtime スキーマのルート型)として解析し、結果を反復処理する方法を示しています。
package main
import (
"fmt"
"google.golang.org/protobuf/proto"
"github.com/MobilityData/gtfs-realtime-bindings/golang/gtfs"
"io/ioutil"
"log"
"net/http"
)
func main() {
var (
username = "YOUR_ACCESS_KEY"
password = "YOUR_SECRET_KEY"
)
client := &http.Client{}
req, err := http.NewRequest("GET", "URL OF YOUR GTFS-REALTIME SOURCE GOES HERE", nil)
req.SetBasicAuth(username, password)
resp, err := client.Do(req)
defer resp.Body.Close()
if err != nil {
log.Fatal(err)
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
feed := gtfs.FeedMessage{}
err = proto.Unmarshal(body, &feed)
if err != nil {
log.Fatal(err)
}
for _, entity := range feed.Entity {
tripUpdate := entity.GetTripUpdate()
trip := tripUpdate.GetTrip()
tripId := trip.GetTripId()
fmt.Printf("Trip ID: %s\n", tripId)
}
}
gtfs-realtime.proto から生成される Golang struct の命名規則の詳細については、Protocol Buffers 開発者サイトの Golang Generated Code セクションを参照してください。