public static async Task <RealtimeArrival[]> GetBusArrivals(string id, CancellationToken cancellationToken) { List <RealtimeArrival> result = new List <RealtimeArrival>(); StringReader reader = new StringReader(await SendRequest("arrivals-and-departures-for-stop/" + id, null, false, cancellationToken)); if (cancellationToken.IsCancellationRequested) { return(null); } XDocument xDoc = XDocument.Load(reader); XElement el = xDoc.Element("response"); el = el?.Element("data"); el = el?.Element("entry"); el = el?.Element("arrivalsAndDepartures"); if (el == null) { return(null); } foreach (XElement el1 in el.Elements("arrivalAndDeparture")) { string routeName = el1.Element("routeShortName") == null?el1.Element("routeLongName").Value : el1.Element("routeShortName").Value; string routeId = el1.Element("routeId")?.Value; string tripId = el1.Element("tripId")?.Value; string stopId = el1.Element("stopId")?.Value; string predictedArrivalTime = el1.Element("predictedArrivalTime")?.Value; string scheduledArrivalTime = el1.Element("scheduledArrivalTime")?.Value; string lastUpdateTime = el1.Element("lastUpdateTime")?.Value; string destination = el1.Element("tripHeadsign")?.Value; long predictedArrivalLong = long.Parse(predictedArrivalTime); long scheduledArrivalLong = long.Parse(scheduledArrivalTime); long? lastUpdateLong = lastUpdateTime == null ? null : new long?(long.Parse(scheduledArrivalTime)); DateTime? predictedArrival = predictedArrivalLong == 0 ? null : new DateTime?((new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) + TimeSpan.FromMilliseconds(predictedArrivalLong)).ToLocalTime()); DateTime scheduledArrival = (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) + TimeSpan.FromMilliseconds(scheduledArrivalLong)).ToLocalTime(); DateTime? lastUpdate = lastUpdateLong == null ? null : new DateTime?((new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) + TimeSpan.FromMilliseconds(lastUpdateLong.Value)).ToLocalTime()); RealtimeArrival arrival = new RealtimeArrival() { RouteName = routeName, PredictedArrivalTime = predictedArrival, ScheduledArrivalTime = scheduledArrival, LastUpdateTime = lastUpdate, Route = routeId, Trip = tripId, Stop = stopId, Destination = destination }; result.Add(arrival); } return(result.ToArray()); }
public static async Task<RealtimeArrival[]> GetBusArrivals(string id, CancellationToken cancellationToken) { List<RealtimeArrival> result = new List<RealtimeArrival>(); StringReader reader = new StringReader(await SendRequest("arrivals-and-departures-for-stop/" + id, null, cancellationToken)); if (cancellationToken.IsCancellationRequested) return null; XDocument xDoc = XDocument.Load(reader); XElement el = xDoc.Element("response"); el = el.Element("data"); el = el.Element("entry"); el = el.Element("arrivalsAndDepartures"); foreach (XElement el1 in el.Elements("arrivalAndDeparture")) { string routeName = el1.Element("routeShortName") == null ? el1.Element("routeLongName").Value : el1.Element("routeShortName").Value; string routeId = el1.Element("routeId")?.Value; string tripId = el1.Element("tripId")?.Value; string stopId = el1.Element("stopId")?.Value; string predictedArrivalTime = el1.Element("predictedArrivalTime")?.Value; string scheduledArrivalTime = el1.Element("scheduledArrivalTime")?.Value; string lastUpdateTime = el1.Element("lastUpdateTime")?.Value; string destination = el1.Element("tripHeadsign")?.Value; long predictedArrivalLong = long.Parse(predictedArrivalTime); long scheduledArrivalLong = long.Parse(scheduledArrivalTime); long? lastUpdateLong = lastUpdateTime == null ? null : new long?(long.Parse(scheduledArrivalTime)); DateTime? predictedArrival = predictedArrivalLong == 0 ? null : new DateTime?((new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) + TimeSpan.FromMilliseconds(predictedArrivalLong)).ToLocalTime()); DateTime scheduledArrival = (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) + TimeSpan.FromMilliseconds(scheduledArrivalLong)).ToLocalTime(); DateTime? lastUpdate = lastUpdateLong == null ? null : new DateTime?((new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) + TimeSpan.FromMilliseconds(lastUpdateLong.Value)).ToLocalTime()); RealtimeArrival arrival = new RealtimeArrival() { RouteName = routeName, PredictedArrivalTime = predictedArrival, ScheduledArrivalTime = scheduledArrival, LastUpdateTime = lastUpdate, Route = routeId, Trip = tripId, Stop = stopId, Destination = destination }; result.Add(arrival); } return result.ToArray(); }