From 3b84fad254a86b3b3ed4e52bdea53d372dd36fe4 Mon Sep 17 00:00:00 2001 From: shellixa Date: Sat, 13 Jun 2026 09:11:52 +0200 Subject: [PATCH] initial commit --- cmd/tracker/main.go | 37 ++++++++++++++++ go.mod | 3 ++ internal/maps/trips.go | 43 +++++++++++++++++++ internal/types/types.go | 63 ++++++++++++++++++++++++++++ tram_info.sh => scripts/tram_info.sh | 18 ++++---- 5 files changed, 155 insertions(+), 9 deletions(-) create mode 100644 cmd/tracker/main.go create mode 100644 go.mod create mode 100644 internal/maps/trips.go create mode 100644 internal/types/types.go rename tram_info.sh => scripts/tram_info.sh (84%) diff --git a/cmd/tracker/main.go b/cmd/tracker/main.go new file mode 100644 index 0000000..87b7284 --- /dev/null +++ b/cmd/tracker/main.go @@ -0,0 +1,37 @@ +package main + +import ( + "log" + "shellixa/puvetra/internal/maps" + "shellixa/puvetra/internal/types" +) + +func main() { + + log.Printf("Starting up..\n") + trips := maps.GetTrips() + + var allTrams []types.MapTrip + + for _, t := range trips { + if t.Mode == "TRAM" { + allTrams = append(allTrams, t) + } + } + + var traminfo []map[string]string + + for _, tr := range allTrams { + data := map[string]string{} + data["line"] = tr.Trips[0].RouteShortName + data["currentStation"] = tr.From.Name + data["nextStation"] = tr.To.Name + data["departure"] = tr.Departure + data["arrival"] = tr.Arrival + traminfo = append(traminfo, data) + } + + log.Printf("%+v\n", traminfo) + log.Printf("%d", len(traminfo)) +} + diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..a33862b --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module shellixa/puvetra + +go 1.26.4 diff --git a/internal/maps/trips.go b/internal/maps/trips.go new file mode 100644 index 0000000..72f8e33 --- /dev/null +++ b/internal/maps/trips.go @@ -0,0 +1,43 @@ +package maps + +import ( + "encoding/json" + "log" + "net/http" + "shellixa/puvetra/internal/types" + "time" +) + +func GetTrips() []types.MapTrip { + client := http.Client{} + req, err := http.NewRequest("GET", "https://api.transitous.org/api/v1/map/trips", nil) + if err != nil { + log.Fatal(err) + } + q := req.URL.Query() + + now := time.Now().Format(time.RFC3339) + q.Add("startTime", now) + q.Add("endTime", now) + q.Add("min", "51.1626,13.5609") + q.Add("max", "50.9973,13.8596") + q.Add("zoom", "14") + q.Add("precision", "2") + req.URL.RawQuery = q.Encode() + + response, err := client.Do(req) + + if err != nil { + log.Fatal(err) + } + + defer response.Body.Close() + + var trips []types.MapTrip + if err := json.NewDecoder(response.Body).Decode(&trips); err != nil { + log.Fatal(err) + } + + return trips + +} diff --git a/internal/types/types.go b/internal/types/types.go new file mode 100644 index 0000000..7a256d5 --- /dev/null +++ b/internal/types/types.go @@ -0,0 +1,63 @@ +package types + + +type TripMeta struct { + TripId string + RouteShortName string + DisplayName string `json:"omitempty"` +} + +type MapTrip struct { + Trips []TripMeta + RouteColor string + Mode string + Distance float32 + Departure string + Arrival string + From Place + To Place + ScheduledDeparture string + ScheduledArrival string + RealTime bool + Polyline string +} + +type Trip struct { + Duration int64 + StartTime string + EndTine string + Transfers int + Id string + Legs []TripLeg +} + +type TripLeg struct { + Mode string + From Place + To Place + Duration int64 + StartTime string + EndTime string + ScheduledStartTime string + ScheduledEndTime string + RealTime bool + Scheduled bool + Distance float32 + Headsign string + TripFrom Place + TripTo Place +} + +type Place struct { + Name string + StopId string + Lat float32 + Lon float32 + Arrival string + Departure string + Track string + StopCode string + Description string + Cancelled bool + Modes []string +} diff --git a/tram_info.sh b/scripts/tram_info.sh similarity index 84% rename from tram_info.sh rename to scripts/tram_info.sh index 34a9ea1..2858f0d 100755 --- a/tram_info.sh +++ b/scripts/tram_info.sh @@ -6,10 +6,10 @@ if [[ $# -ne 1 ]]; then fi -if [[ $1 -lt 1 || $1 -gt 13 || $1 -eq 5 ]]; then - >&2 echo "$1 is not a valid Tram in Dresden" - exit 1 -fi +#if [[ $1 -lt 1 || $1 -gt 13 || $1 -eq 5 ]]; then +# >&2 echo "$1 is not a valid Tram in Dresden" +# exit 1 +#fi if [[ ! -x "$(command -v jq)" ]]; then >&2 echo "You need to have 'jq' installed. You can download it here: https://jqlang.org/download/" @@ -18,16 +18,16 @@ fi line_num="$1" current_date=$(date -Iseconds) -window=$(date -Iseconds -d "+10 minutes") +window=$(date -Iseconds -d "+5 minutes") api="https://api.transitous.org/api" -response=$(curl -s --get \ +response=$(curl --get \ --data-urlencode "startTime=$current_date" \ --data-urlencode "endTime=$current_date" \ --data-urlencode "min=51.1626,13.5609" \ --data-urlencode "max=50.9973,13.8596" \ - --data-urlencode "zoom=15" \ + --data-urlencode "zoom=13" \ --data-urlencode "precision=2" \ "$api/v1/map/trips") @@ -38,13 +38,13 @@ all_trams=$(jq -c "$query" <<< "$response") # echo "$all_trams" tripId=$(jq -r '.[0].trips[0].tripId' <<< "$all_trams") -response=$(curl -s --get \ +response=$(curl --get \ --data-urlencode "tripId=$tripId" \ "$api/v6/trip") trip=$(jq -c '[.legs[0].from] + [.legs[0].intermediateStops[]] + [.legs[0].to] | map({stopId: .stopId, name: .name})' <<< $response) -# jq <<< $trip +# jq -c <<< $trip currentStops=$(jq -c 'map(.from.stopId[:-2])' <<< "$all_trams")