コード例 #1
0
        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());
        }
コード例 #2
0
ファイル: ApiLayer.cs プロジェクト: AlexKven/OneAppAway-
        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();
        }