Esempio n. 1
0
        public async Task Upsert(string table, TrafikverketTrainMessageModel record)
        {
            var collection = db.GetCollection <TrafikverketTrainMessageModel>(table);


            collection.ReplaceOne(filter: (u => u.EventId == record.EventId), options: new UpdateOptions {
                IsUpsert = true
            }, replacement: record);
        }
        public static async void PostTrainMessage(HttpContent data)

        {
            string url = "https://api.trafikinfo.trafikverket.se/v2/data.json";

            using (HttpResponseMessage response = await ApiHelper.ApiClient.PostAsync(url, data))
            {
                if (response.IsSuccessStatusCode)
                {
                    string fromTrafikverket = await response.Content.ReadAsStringAsync();

                    JObject jsonObject = JObject.Parse(fromTrafikverket);


                    // json objectet från trafikverket har strukturen ("RESPONSE") ("RESULT") [ ("TrainStation") ]

                    var trainMessage = jsonObject.SelectToken("RESPONSE").SelectToken("RESULT")[0].SelectToken("TrainMessage");
                    //Console.WriteLine(trainMessage.ToString());
                    MongoCRUD db = new MongoCRUD("admin");
                    foreach (var message in trainMessage)
                    {
                        TrafikverketTrainMessageModel model = new TrafikverketTrainMessageModel();

                        // sätter in alla värden enligt modellen i TrafikverketModel
                        //model.EventId = message[key: "EventId"].ToString();
                        model.Header = message[key : "Header"].ToString();
                        model.ExternalDescription = message[key : "ExternalDescription"].ToString();

                        JToken geo         = message[key : "Geometry"];
                        JToken wgs84       = geo[key : "WGS84"];
                        string pointstring = wgs84.ToString();


                        // Regex för att ta bort "POINT" från fältet och sedan "( )"
                        pointstring = Regex.Replace(pointstring, "POINT", "");
                        pointstring = Regex.Replace(pointstring, @"[()]", "");

                        // delar stringen på alla mellanrum. !OBS fältet startar med mellanrum vilket skapar 3! delar
                        string[] substring = Regex.Split(pointstring, " ");

                        // plockar upp och delar ut cordinaterna, mest för läsbarhet och att inte råka skicka med mellanrummet
                        string[] coords = { substring[1], substring[2] };
                        model.Longitude = float.Parse(coords[0], CultureInfo.InvariantCulture);
                        model.Latitude  = float.Parse(coords[1], CultureInfo.InvariantCulture);

                        model.EventId          = message[key : "EventId"].ToString();
                        model.StartDateTime    = message[key : "StartDateTime"].ToObject <DateTime>();
                        model.ModifiedTime     = message[key : "ModifiedTime"].ToString();
                        model.AffectedLocation = message[key : "AffectedLocation"].ToObject <List <string> >();



                        // försöker lägga till EndDate om detta finns annars skriver ut felmedelande i consolen
                        try
                        {
                            model.EndDateTime = message[key : "EndDateTime"].ToObject <DateTime>();
                        }

                        catch
                        {
                            //Console.WriteLine("No endate time set for model");
                        }

                        //db.InsertRecord("TrainMessage", model);
                        await db.Upsert(Trafikverket.trainMessage, model);
                    }
                }
                else
                {
                    Console.WriteLine("!!FEL VID KONTAKT MED API!!");
                    throw new Exception(response.ReasonPhrase);
                }
            }
        }