mirror of
https://github.com/cjdenio/uta-trax-api.git
synced 2026-10-03 16:06:19 +00:00
update schedule data
This commit is contained in:
2 files changed
+26
-30
No files matched your search
+26
-30
@@ -2,15 +2,12 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"encoding/csv"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
"math"
|
"math"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"slices"
|
|
||||||
"strconv"
|
|
||||||
|
|
||||||
pb "github.com/cjdenio/uta-trax-api/proto"
|
pb "github.com/cjdenio/uta-trax-api/proto"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
@@ -93,6 +90,8 @@ func getVehicles() ([]*pb.VehiclePosition, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Printf("Found %d vehicles...", len(feed.Entity))
|
||||||
|
|
||||||
vehicles := make([]*pb.VehiclePosition, 0, len(feed.Entity))
|
vehicles := make([]*pb.VehiclePosition, 0, len(feed.Entity))
|
||||||
for _, v := range feed.Entity {
|
for _, v := range feed.Entity {
|
||||||
if v.Vehicle != nil {
|
if v.Vehicle != nil {
|
||||||
@@ -112,46 +111,42 @@ type TripInfo struct {
|
|||||||
var trips = make(map[string]*TripInfo)
|
var trips = make(map[string]*TripInfo)
|
||||||
|
|
||||||
func loadTrips() error {
|
func loadTrips() error {
|
||||||
f, err := os.Open("gtfs/trips.txt")
|
rows, err := scheduleDb.Query("SELECT route_id, trip_id, trip_headsign, direction_id FROM trips;")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
r := csv.NewReader(f)
|
|
||||||
|
|
||||||
header, err := r.Read()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
route_id := slices.Index(header, "route_id")
|
|
||||||
trip_id := slices.Index(header, "trip_id")
|
|
||||||
direction_id := slices.Index(header, "direction_id")
|
|
||||||
trip_headsign := slices.Index(header, "trip_headsign")
|
|
||||||
|
|
||||||
for {
|
for {
|
||||||
if record, err := r.Read(); err == nil {
|
if next := rows.Next(); next {
|
||||||
trip_info := new(TripInfo)
|
trip_info := new(TripInfo)
|
||||||
trip_info.Headsign = record[trip_headsign]
|
|
||||||
|
|
||||||
direction, err := strconv.ParseInt(record[direction_id], 10, 32)
|
var route_id string
|
||||||
if err == nil {
|
var trip_id string
|
||||||
trip_info.Direction = int32(direction)
|
var trip_headsign string
|
||||||
|
var direction_id int32
|
||||||
|
|
||||||
|
err = rows.Scan(&route_id, &trip_id, &trip_headsign, &direction_id)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
switch record[route_id] {
|
trip_info.Headsign = trip_headsign
|
||||||
|
|
||||||
|
trip_info.Direction = direction_id
|
||||||
|
|
||||||
|
switch route_id {
|
||||||
case "8246":
|
case "8246":
|
||||||
trip_info.Line = pb.VehicleFeed_RED
|
trip_info.Line = pb.VehicleFeed_RED
|
||||||
trips[record[trip_id]] = trip_info
|
trips[trip_id] = trip_info
|
||||||
case "39020":
|
case "39020":
|
||||||
trip_info.Line = pb.VehicleFeed_GREEN
|
trip_info.Line = pb.VehicleFeed_GREEN
|
||||||
trips[record[trip_id]] = trip_info
|
trips[trip_id] = trip_info
|
||||||
case "5907":
|
case "5907":
|
||||||
trip_info.Line = pb.VehicleFeed_BLUE
|
trip_info.Line = pb.VehicleFeed_BLUE
|
||||||
trips[record[trip_id]] = trip_info
|
trips[trip_id] = trip_info
|
||||||
case "45389":
|
case "45389":
|
||||||
trip_info.Line = pb.VehicleFeed_STREETCAR
|
trip_info.Line = pb.VehicleFeed_STREETCAR
|
||||||
trips[record[trip_id]] = trip_info
|
trips[trip_id] = trip_info
|
||||||
// case "41065":
|
// case "41065":
|
||||||
// trip_info.Line = pb.VehicleFeed_FRONTRUNNER
|
// trip_info.Line = pb.VehicleFeed_FRONTRUNNER
|
||||||
// trips[record[trip_id]] = trip_info
|
// trips[record[trip_id]] = trip_info
|
||||||
@@ -170,6 +165,7 @@ func feedifyVehicles(vehicles []*pb.VehiclePosition) pb.VehicleFeed {
|
|||||||
for _, vehicle := range vehicles {
|
for _, vehicle := range vehicles {
|
||||||
trip, ok := trips[*vehicle.Trip.TripId]
|
trip, ok := trips[*vehicle.Trip.TripId]
|
||||||
if !ok {
|
if !ok {
|
||||||
|
log.Printf("No matching trip '%s', skipping...", *vehicle.Trip.TripId)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,15 +186,15 @@ func feedifyVehicles(vehicles []*pb.VehiclePosition) pb.VehicleFeed {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
if err := loadTrips(); err != nil {
|
|
||||||
log.Fatalln(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
_db, err := sql.Open("sqlite3", "uta-gtfs.db")
|
_db, err := sql.Open("sqlite3", "uta-gtfs.db")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
scheduleDb = _db
|
scheduleDb = _db
|
||||||
|
if err := loadTrips(); err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
// vehicles, err := getVehicles()
|
// vehicles, err := getVehicles()
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
|
|||||||
BIN
Binary file not shown.
Reference in new issue
Block a user