Val av API för avgångar från varje station
Kan någon tipsa om vilket API jag ska välja för att se aktuella avgångar från varje tunnelbanestation i Stockholm? Jag testade med GTFS Regional Realtime och SL:s Realtidsinformation 4 men får inte ut det som jag är ute efter. I fallet med GTFS är det rätt mycket data och i fallet med Realtidsinformation 4 är antalet anrop begränsade till 30/m, vilket gör det svårt att hämta ut information för varje station. Tanken är att bygga en live karta vars enda uppgift är att visa en röd/grön/blå plupp på en karta som ska presentera vilket tåg som är på stationen.
Följ inlägget
0
följare
Om du vill visa information om alla stationer samtidigt måste man använda ett GTFS-flöde. Sen är det GTFS Regional som gäller om man vill ha realtidsdata.
I ditt fall skulle det gå till såhär:
- Du laddar ner de statiska GTFS data
- Där hittar du hållplatser som du är intresserad i (stops.txt) samt information om rutter som röda, blåa och gröna linjen (routes.txt) och deras körningar (trips.txt).
- Sen laddar du ner realtidsdata som innehåller förseningar, TripUpdates.pb. Där hittar du en sammling av trip updates, som har följande struktur:
entity {
id: "14010513984964949"
trip_update {
trip {
trip_id: "14010000581778968"
start_date: "20220103"
schedule_relationship: SCHEDULED
}
stop_time_update {
stop_sequence: 8
arrival {
delay: 46
time: 1641200506
uncertainty: 0
}
departure {
delay: 62
time: 1641200522
uncertainty: 0
}
stop_id: "9022001022091002"
}
stop_time_update {
stop_sequence: 13
arrival {
delay: -119
time: 1641201001
}
departure {
delay: -119
time: 1641201001
}
stop_id: "9022001022151001"
}
timestamp: 1641200820
}
}
Det här exemplet visar att trip 14010000581778968 (trip_id i trips.txt) på 03/01/2022 hade (uncertainty 0, hållplatsen är angjord) en försening av 46 sekunder vid ankomst till åttande hållplats (vilket var hållplats 9022001022091002 i stops.txt) och att den kommer vara 119 sekunder för tidigt vid trettonde hållplatsen. De "nya" ankomst- och avgångstider finns även med som tidsstämpel, så att du inte behöver att leta upp de originaltider i statiska datat.
Avgånger som inte är försenad/för tidigt finns inte med i realtidsdata, för att få en lista på dem kan man "beräkna" dem genom att kolla vilka trips som kör idag (trips.txt till calendar_dates.txt genom service_id) för att sen slå upp dessa trips i stop_times.txt för att se vid vilka hållplatser de stannar (eller för att se vilka trips som stannar vid vilka hållplats).
Låt inte denna beskrivning avskräcka dig från att använda GTFS - det låter mer komplicerad än det är.
Säg till om vi kan hjälpa något mer.
Hälsningar,
Bert
Tack för ditt svar, det gav mig några idéer som jag ska försöka få ner i kod.
Meanwhile, tänkte fråga dig om du har något bra tips hur TripsUpdates.pb kan läsas in i Python? Strukturen är minst sagt komplext (nestad).
Jag satte ihop en pandas dataframe som innehåller all nödvändig information om alla tunnelbanetåg, stationer, stationsnamn, stopp- och avgångstider samt linjenamn baserat på information som jag får från GTFS static data.
subway_data:
route_id , route_type , route_des, trip_id direction_id, stop_id stop_name, arrival_time, departure_time, stop_sequence, stop_headsign
Det jag försöker nu är att uppdatera värden för ankomst och avgångstider genom att slå ihop TripUpdates och min dataframe. TripUpdates informationen lever just nu i en separat dict i JSON format.
Vänliga hälsningar,
Denny
Exempel Python kod hittar du här:
https://developers.google.com/transit/gtfs-realtime/examples/python-sample
Hälsningar,
Bert