using System; using System.IO; using System.Net; using System.Text.RegularExpressions; using System.Collections; using System.Collections.Specialized; using System.Text; namespace BrunoForecast { public class MyWeatherData { private string rawHtml; // private Global variable to store a copy of returned raw HTML private string result; private string url; public string data; public string GetData(string rawHtml) { Regex regex = new Regex("<div id=\"cnnWeatherForecastCurrentContent\">((.|\n)*?)<div class=\"cnnWireBoxFooter\">", RegexOptions.IgnoreCase); Match oM = regex.Match(rawHtml); string newResults = oM.Value; string data = GetCurrentTemp(newResults); data += GetHi(newResults); data += GetLo(newResults); data += GetSunrise(newResults); data += GetSunset(newResults); data += GetBarometer(newResults); data += GetWind(newResults); return data; } public static Match[] FindSubstrings(string source, string matchPattern, bool findAllUnique) { SortedList uniqueMatches = new SortedList(); Match[] retArray = null; Regex RE = new Regex(matchPattern, RegexOptions.Multiline); MatchCollection theMatches = RE.Matches(source); if (findAllUnique) { for (int counter = 0; counter < theMatches.Count; counter++) { if (!uniqueMatches.ContainsKey(theMatches[counter].Value)) { uniqueMatches.Add(theMatches[counter].Value, theMatches[counter]); } } retArray = new Match[uniqueMatches.Count]; uniqueMatches.Values.CopyTo(retArray, 0); } else { retArray = new Match[theMatches.Count]; theMatches.CopyTo(retArray, 0); } return (retArray); } public string GetCurrentTemp(string rawHtml) { string start_string = "<div class=\"cnnweathertempcurrent\">"; string matchPattern = start_string + "((.|\n)*?)</div>"; Match[] x1 = FindSubstrings(rawHtml, matchPattern, false); StringBuilder sb = new StringBuilder(); foreach (Match m in x1) { sb.Append(m.Value); } string s = sb.ToString(); return "<b><font size=\"1\">Current temp: </b>" + s.Substring(start_string.Length, s.IndexOf("&") - start_string.Length) + " degrees</font><br />"; } public string GetHi(string rawHtml) { string start_string = "<b>hi "; string matchPattern = start_string + "((.|\n)*?)</div>"; Match[] x1 = FindSubstrings(rawHtml, matchPattern, false); StringBuilder sb = new StringBuilder(); foreach (Match m in x1) { sb.Append(m.Value); } string s = sb.ToString(); return "<b><font size=\"1\">Hi temp: </b>" + s.Substring(start_string.Length, s.IndexOf("&") - start_string.Length) + " degrees</font><br />"; } public string GetLo(string rawHtml) { string start_string = "<b>lo "; string matchPattern = start_string + "((.|\n)*?)</div>"; Match[] x1 = FindSubstrings(rawHtml, matchPattern, false); StringBuilder sb = new StringBuilder(); foreach (Match m in x1) { sb.Append(m.Value); } string s = sb.ToString(); return "<b><font size=\"1\">Low temp: </b>" + s.Substring(start_string.Length, s.IndexOf("&") - start_string.Length) + " degrees</font><br />"; } public string GetSunrise(string rawHtml) { string matchPattern = "<b>sunrise:((.|\n)*?)<br />"; Match[] x1 = FindSubstrings(rawHtml, matchPattern, false); StringBuilder sb = new StringBuilder(); int max_count = 0; foreach (Match m in x1) { sb.Append(m.Value); if (++max_count == 2) break; Console.WriteLine(m.Value); } return "<font size=\"1\">" + sb.ToString().Replace("</div>", "") + "</font>"; } public string GetSunset(string rawHtml) { string matchPattern = "<b>sunset:((.|\n)*?)<br />"; Match[] x1 = FindSubstrings(rawHtml, matchPattern, false); StringBuilder sb = new StringBuilder(); foreach (Match m in x1) { sb.Append(m.Value); Console.WriteLine(m.Value); } return "<font size=\"1\">" + sb.ToString().Replace("</div>", "") + "</font>"; } public string GetBarometer(string rawHtml) { string matchPattern = "<b>barometer:((.|\n)*?)<br />"; Match[] x1 = FindSubstrings(rawHtml, matchPattern, false); StringBuilder sb = new StringBuilder(); foreach (Match m in x1) { sb.Append(m.Value); Console.WriteLine(m.Value); } return "<font size=\"1\">" + sb.ToString().Replace("</div>", "") + "</font>"; } public string GetWind(string rawHtml) { string matchPattern = "<b>wind:((.|\n)*?)</div>"; Match[] x1 = FindSubstrings(rawHtml, matchPattern, false); StringBuilder sb = new StringBuilder(); foreach (Match m in x1) { sb.Append(m.Value); Console.WriteLine(m.Value); } return "<font size=\"1\">" + sb.ToString().Replace("</div>", "") + "</font>"; } public string GetHtml() { return data; } public MyWeatherData(string city, string zip) { url = "http://weather.cnn.com/weather/forecast.jsp?locCode=" + city + "&zipCode=" + zip; WebRequest objRequest = HttpWebRequest.Create(url); WebResponse objResponse = objRequest.GetResponse(); Stream stream = objResponse.GetResponseStream(); StreamReader sr = new StreamReader(stream); result = sr.ReadToEnd(); rawHtml = result.ToLower(); data = GetData(rawHtml); objResponse.Close(); } public void Show() { Console.Write("The result is " + result); } } }