Beispiel #1
0
        static WeatherReport CreateReportXML(XElement item)
        {
            WeatherReport buildReport = new WeatherReport();
            StringBuilder sb          = new StringBuilder();

            //there is a bug parsing raw publish date, so it has to be formatted
            string str = item.Descendants("pubDate").First().Value;

            string[] descriptionSplit = str.Split(' ');
            sb.AppendFormat("{0} {1} {2} {3}",
                            descriptionSplit[2], descriptionSplit[1], descriptionSplit[3], descriptionSplit[4]);
            buildReport.PubDate = DateTime.Parse(sb.ToString());
            sb.Clear();

            str = item.Descendants("description").First().Value;
            descriptionSplit = str.Split(':');
            string[] splitStr = descriptionSplit[1].Split('(');
            buildReport.Sol = int.Parse(splitStr[0].Split()[2]);
            sb.Append(splitStr[1]);
            sb.Length--;

            buildReport.MeasuredDate = DateTime.Parse(sb.ToString());

            descriptionSplit    = descriptionSplit[2].Split(',');
            buildReport.Weather = descriptionSplit[0].Trim();



            MatchCollection numbers = Regex.Matches(descriptionSplit[1], @"-*[0-9,\.]+");

            buildReport.TempretureHighC = ParseToDouble(numbers[0].ToString()); // double.Parse(numbers[0].ToString());
            buildReport.TempretureHighF = ParseToDouble(numbers[1].ToString()); // double.Parse(numbers[1].ToString());

            numbers = Regex.Matches(descriptionSplit[2], @"-*[0-9,\.]+");
            buildReport.TempretureLowC = ParseToDouble(numbers[0].ToString()); // double.Parse(numbers[0].ToString());
            buildReport.TempretureLowF = ParseToDouble(numbers[1].ToString()); // double.Parse(numbers[1].ToString());

            numbers = Regex.Matches(descriptionSplit[3], @"-*[0-9,\.]+");
            buildReport.PressureHPA = ParseToDouble(numbers[0].ToString()); // double.Parse(numbers[0].ToString());

            numbers = Regex.Matches(descriptionSplit[4], @"-*[0-9,\.]+");
            buildReport.WindSpeedKmh = ParseToDouble(numbers[0].ToString()); // double.Parse(numbers[0].ToString());
            buildReport.WindSpeedMph = ParseToDouble(numbers[1].ToString()); // double.Parse(numbers[1].ToString());

            buildReport.WindDirection = GetDirection(descriptionSplit[4].Split(new char[] { 'a', 't' })[0]);

            numbers = Regex.Matches(descriptionSplit[5], @"[0-9,\.]+");
            buildReport.DaylightStartAM = ParseToDouble(numbers[0].ToString()); // double.Parse(numbers[0].ToString());
            buildReport.DaylightEndPM   = ParseToDouble(numbers[1].ToString()); // double.Parse(numbers[1].ToString());


            return(buildReport);
        }
Beispiel #2
0
        static WeatherReport BadMeasureDate(WeatherReport buildReport, StringBuilder sb)
        {
            string badDate = sb.ToString();

            if (badDate.Contains("ene"))
            {
                buildReport.MeasuredDate = new DateTime(2013, 01, int.Parse(sb[0].ToString() + sb[1]));
            }
            else if (badDate.StartsWith("Ene"))
            {
                buildReport.MeasuredDate = new DateTime(2013, 01, int.Parse(sb[4].ToString() + sb[5]));
            }
            else if (badDate.EndsWith("UTC"))
            {
                badDate = badDate.Remove(badDate.IndexOf("UTC"));
                if (badDate.StartsWith("Sept"))
                {
                    badDate = badDate.Replace("Sept", "Sep");
                }
                buildReport.MeasuredDate = DateTime.Parse(badDate, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
                //buildReport.MeasuredDate = DateTime.ParseExact(badDate, formats, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
            }
            else if (badDate.StartsWith("Sept"))
            {
                if (badDate.StartsWith("Sept."))
                {
                    badDate = badDate.Replace("Sept.", "Sep");
                    buildReport.MeasuredDate = DateTime.Parse(badDate, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
                }
                else if (badDate.StartsWith("Sept"))
                {
                    badDate = badDate.Replace("Sept", "Sep");
                    buildReport.MeasuredDate = DateTime.Parse(badDate, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
                }
            }

            return(buildReport);
        }
Beispiel #3
0
        //public static async Task<ObservableCollection<Tweet>> GetTweetsAsyncXML()
        //{
        //    ObservableCollection<Tweet> result = new ObservableCollection<Tweet>();
        //    string[] feedsToGet = { "https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=MarsCuriosity",
        //                            "https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=MarsWxReport",
        //                            "https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=Nasa"};
        //    for (int i = 0; i < feedsToGet.Length; i++)
        //    {
        //        XDocument xmlDoc = XDocument.Load(feedsToGet[i]);

        //        IEnumerable<XElement> twitterItems = xmlDoc.Root.Descendants("item");

        //        foreach (var item in twitterItems)
        //        {
        //            string content = item.Value;
        //            if (!content.Contains("MarsWxReport: Sol "))
        //            {
        //                result.Add(GetTweetXML(item));
        //            }
        //        }
        //    }
        //    var ordered = (from item in result
        //                  orderby item.DatePublished descending
        //                  select item).ToList();
        //    result.Clear();
        //    foreach (var item in ordered)
        //    {
        //        result.Add(item);
        //    }

        //    //viewModel.LoadingFeed = true;
        //    return result;
        //}

        //static Tweet GetTweetXML(XElement item)
        //{
        //    StringBuilder sb = new StringBuilder();

        //    string str = item.Descendants("pubDate").First().Value;
        //    string[] descriptionSplit = str.Split(' ');
        //    sb.AppendFormat("{0} {1} {2} {3}",
        //        descriptionSplit[2], descriptionSplit[1], descriptionSplit[3], descriptionSplit[4]);
        //    DateTime datePublished = DateTime.Parse(sb.ToString());

        //    str = item.Descendants("description").First().Value;
        //    int nameEnd = str.IndexOf(':');
        //    string name = str.Substring(0, nameEnd);


        //    Tweet tweet = new Tweet(str.Substring(++nameEnd, str.Length - nameEnd), name, datePublished, "");

        //    return tweet;
        //}

        static WeatherReport CreateReport(string text, string pubDate)
        {
            WeatherReport buildReport = new WeatherReport();
            StringBuilder sb          = new StringBuilder();

            //there is a bug parsing raw publish date, so it has to be formatted
            string[] descriptionSplit = pubDate.Split(' ');
            sb.AppendFormat("{0} {1} {2} {3}",
                            descriptionSplit[2], descriptionSplit[1],
                            descriptionSplit[5].Substring(0, descriptionSplit[5].Length - 1),
                            descriptionSplit[3]);
            sb.Length--;

            buildReport.PubDate = DateTime.Parse(sb.ToString());
            sb.Clear();

            descriptionSplit = text.Split(':');
            Match number = Regex.Match(descriptionSplit[0], @"[0-9]+");

            buildReport.Sol = int.Parse(number.Value.ToString());

            string[] splitStr = descriptionSplit[0].Split('(');
            //buildReport.Sol = int.Parse(splitStr[0].Split()[2]);
            sb.Append(splitStr[1]);
            sb.Length--;

            DateTime tryParse;

            if (!DateTime.TryParse(sb.ToString(), out tryParse))
            {
                buildReport = BadMeasureDate(buildReport, sb);
            }
            else
            {
                buildReport.MeasuredDate = tryParse;
            }

            descriptionSplit    = descriptionSplit[1].Split(',');
            buildReport.Weather = descriptionSplit[0].Trim();

            MatchCollection numbers = Regex.Matches(descriptionSplit[1], @"-*[0-9,\.\,]+");

            buildReport.TempretureHighC = ParseToDouble(numbers[0].ToString()); // double.Parse(numbers[0].ToString());
            if (numbers.Count >= 2)
            {
                buildReport.TempretureHighF = ParseToDouble(numbers[1].ToString()); // double.Parse(numbers[1].ToString());
            }
            else
            {
                if (descriptionSplit.Length < 7)
                {
                    return(buildReport);
                }
                descriptionSplit[2] = descriptionSplit[3];
                descriptionSplit[3] = descriptionSplit[4];
                descriptionSplit[4] = descriptionSplit[5];
                descriptionSplit[5] = descriptionSplit[6];
            }

            numbers = Regex.Matches(descriptionSplit[2], @"-*[0-9,\.]+");
            if (numbers.Count == 2)
            {
                buildReport.TempretureLowC = ParseToDouble(numbers[0].ToString()); // double.Parse(numbers[0].ToString());
                buildReport.TempretureLowF = ParseToDouble(numbers[1].ToString()); // double.Parse(numbers[1].ToString());
            }
            else
            {
            }

            numbers = Regex.Matches(descriptionSplit[3], @"-*[0-9,\.]+");
            double pressureValue = ParseToDouble(numbers[0].ToString());

            if (pressureValue > 100)
            {
                string pressureStr = numbers[0].ToString();
                buildReport.PressureHPA = ParseToDouble(string.Format("{0}.{1}{2}", pressureStr[0], pressureStr[1], pressureStr[2]));
            }
            else
            {
                buildReport.PressureHPA = pressureValue; // double.Parse(numbers[0].ToString());
            }

            numbers = Regex.Matches(descriptionSplit[4], @"-*[0-9,\.]+");
            if (numbers.Count == 2)
            {
                buildReport.WindSpeedKmh  = ParseToDouble(numbers[0].ToString()); // double.Parse(numbers[0].ToString());
                buildReport.WindSpeedMph  = ParseToDouble(numbers[1].ToString()); // double.Parse(numbers[1].ToString());
                buildReport.WindDirection = GetDirection(descriptionSplit[4].Split(new char[] { 'a', 't' })[0]);
            }



            numbers = Regex.Matches(descriptionSplit[5], @"[0-9,\.]+");
            if (numbers.Count == 2)
            {
                buildReport.DaylightStartAM = ParseToDouble(numbers[0].ToString()); // double.Parse(numbers[0].ToString());
                buildReport.DaylightEndPM   = ParseToDouble(numbers[1].ToString()); // double.Parse(numbers[1].ToString());
            }

            return(buildReport);
        }