Пример #1
0
        /// <summary>
        /// Extracts all departures for a given stop and its lines
        /// </summary>
        /// <param name="jsonData">Digitransit GraphQL query result in JSON format</param>
        /// <param name="stops">List of stops with lines to populate departures</param>
        /// <returns>Stop with lines with list of upcoming departures</returns>
        public List <Stop> ParseDepartureDataJson(List <string> jsonData, List <Stop> stops)
        {
            foreach (var json in jsonData)
            {
                // Deserialize using JSON.net
                Data.Digitransit.Digitransit temp = JsonConvert.DeserializeObject <Data.Digitransit.Digitransit>(json);

                // Find stop by matching GTFS Id
                Stop stop = stops.Find(s => s.GtfsId == temp.Data.Stop.GtfsId);

                // Alternative option - loop through lines
                foreach (var line in stop.Lines)
                {
                    // Find corresponding pattern
                    var departure = temp.Data.Stop.StoptimesForPatterns.Find(dep => dep.Pattern.Code.Contains(line.Code));

                    List <DateTime> departures = new List <DateTime>();

                    // Set departure time
                    foreach (var stopTime in departure.Stoptimes)
                    {
                        DateTimeOffset offset        = DateTimeOffset.FromUnixTimeSeconds(stopTime.ScheduledDeparture);
                        DateTime       departureTime = DateTime.Today.AddHours(offset.Hour).AddMinutes(offset.Minute);
                        departures.Add(departureTime);
                    }

                    line.SetDepartures(departures);
                }

                /* Scan departures and find for matching lines
                 * foreach(var departure in temp.Data.Stop.StoptimesForPatterns)
                 * {
                 *  // For lines e.g. 6T there's a problem. It returns internal line 6 instead of 6T
                 *  Line line = stop.Lines.Find(l => departure.Pattern.Code.Contains(l.Code));
                 *
                 *  if(line != null)
                 *  {
                 *      List<DateTime> departures = new List<DateTime>();
                 *
                 *      // Set departure time
                 *      foreach(var stopTime in departure.Stoptimes)
                 *      {
                 *          DateTimeOffset offset = DateTimeOffset.FromUnixTimeSeconds(stopTime.ScheduledDeparture);
                 *          DateTime departureTime = DateTime.Today.AddHours(offset.Hour).AddMinutes(offset.Minute);
                 *          departures.Add(departureTime);
                 *      }
                 *
                 *      line.SetDepartures(departures);
                 *  }
                 * }*/
            }

            return(stops);
        }
Пример #2
0
        public List <Stop> ParseStopsFromJSON(string input)
        {
            List <Stop> stops = new List <Stop>();

            Data.Digitransit.Digitransit elements = JsonConvert.DeserializeObject <Data.Digitransit.Digitransit>(input);

            foreach (var element in elements.Data.stops)
            {
                Stop stop = new Stop();
                stop.Code = element.Code;
                stop.Name = element.Name;

                stops.Add(stop);
            }

            return(stops);
        }