Links
Beispielcode
private void btnReadRSS_Click(object sender, EventArgs e) { string sTempVal = string.Empty; string sLanguage = string.Empty; string sUnitTemperature = string.Empty; string sUnitDistance = string.Empty; string sUnitPressure = string.Empty; string sUnitSpeed = string.Empty; // p=GMXX0007 -> LocationID von Berlin // u=c -> metrisches System (°C, km/h) verwenden string sURLRSSFeed = "http://weather.yahooapis.com/forecastrss?p=GMXX0007&u=c"; // Wetterdaten als RSS-Feed (XML) von Yahoo! lesen XmlDocument xmlRSS = new XmlDocument(); xmlRSS.Load(new XmlTextReader(sURLRSSFeed)); // Daten aus XML lesen und in die RichTextBox eintragen rtbContent.Clear(); // General rtbContent.AppendText("General:\n"); rtbContent.AppendText("* Title:\t" + xmlRSS["rss"]["channel"]["title"].InnerText + "\n"); rtbContent.AppendText("* Link:\t" + xmlRSS["rss"]["channel"]["link"].InnerText + "\n"); rtbContent.AppendText("* Description:\t" + xmlRSS["rss"]["channel"]["description"].InnerText + "\n"); sLanguage = xmlRSS["rss"]["channel"]["language"].InnerText; rtbContent.AppendText("* Language:\t" + sLanguage + "\n"); rtbContent.AppendText("* LastBuildDate:\t" + xmlRSS["rss"]["channel"]["lastBuildDate"].InnerText + "\n"); // Item rtbContent.AppendText("\nItem:\n"); rtbContent.AppendText("* Title:\t" + xmlRSS["rss"]["channel"]["item"]["title"].InnerText + "\n"); rtbContent.AppendText("* Link:\t" + xmlRSS["rss"]["channel"]["item"]["link"].InnerText + "\n"); rtbContent.AppendText("* Latitude:\t" + xmlRSS["rss"]["channel"]["item"]["geo:lat"].InnerText + "\n"); rtbContent.AppendText("* Longitude:\t" + xmlRSS["rss"]["channel"]["item"]["geo:long"].InnerText + "\n"); rtbContent.AppendText("* Publishing date:\t" + xmlRSS["rss"]["channel"]["item"]["pubDate"].InnerText + "\n"); // Location rtbContent.AppendText("\nLocation:\n"); rtbContent.AppendText("* City:\t" + xmlRSS["rss"]["channel"]["yweather:location"].Attributes["city"].Value + "\n"); rtbContent.AppendText("* Region:\t" + xmlRSS["rss"]["channel"]["yweather:location"].Attributes["region"].Value + "\n"); rtbContent.AppendText("* Country:\t" + xmlRSS["rss"]["channel"]["yweather:location"].Attributes["country"].Value + "\n"); // Units rtbContent.AppendText("\nUnits:\n"); sUnitTemperature = "°" + xmlRSS["rss"]["channel"]["yweather:units"].Attributes["temperature"].Value; sUnitDistance = xmlRSS["rss"]["channel"]["yweather:units"].Attributes["distance"].Value; sUnitPressure = xmlRSS["rss"]["channel"]["yweather:units"].Attributes["pressure"].Value; sUnitSpeed = xmlRSS["rss"]["channel"]["yweather:units"].Attributes["speed"].Value; rtbContent.AppendText("* Temperature:\t" + sUnitTemperature + "\n"); rtbContent.AppendText("* Distance:\t" + sUnitDistance + "\n"); rtbContent.AppendText("* Pressure:\t" + sUnitPressure + "\n"); rtbContent.AppendText("* Speed:\t" + sUnitSpeed + "\n"); // Condition rtbContent.AppendText("\nCondition:\n"); rtbContent.AppendText("* Text:\t" + xmlRSS["rss"]["channel"]["item"]["yweather:condition"].Attributes["text"].Value + "\n"); sTempVal = xmlRSS["rss"]["channel"]["item"]["yweather:condition"].Attributes["code"].Value; rtbContent.AppendText("* Code:\t" + sTempVal + " (" + ConditionCodeToString(sTempVal) + ")\n"); rtbContent.AppendText("* Temp:\t" + xmlRSS["rss"]["channel"]["item"]["yweather:condition"].Attributes["temp"].Value + sUnitTemperature + "\n"); rtbContent.AppendText("* Date:\t" + xmlRSS["rss"]["channel"]["item"]["yweather:condition"].Attributes["date"].Value + "\n"); // Wind rtbContent.AppendText("\nWind:\n"); rtbContent.AppendText("* Chill:\t" + xmlRSS["rss"]["channel"]["yweather:wind"].Attributes["chill"].Value + sUnitTemperature + "\n"); rtbContent.AppendText("* Direction:\t" + xmlRSS["rss"]["channel"]["yweather:wind"].Attributes["direction"].Value + "°" + "\n"); rtbContent.AppendText("* Speed:\t" + xmlRSS["rss"]["channel"]["yweather:wind"].Attributes["speed"].Value + " " + sUnitSpeed + "\n"); // Atmosphere rtbContent.AppendText("\nAtmosphere:\n"); rtbContent.AppendText("* Humidity:\t" + xmlRSS["rss"]["channel"]["yweather:atmosphere"].Attributes["humidity"].Value + "%" + "\n"); float fVisibility = float.Parse(xmlRSS["rss"]["channel"]["yweather:atmosphere"].Attributes["visibility"].Value, System.Globalization.CultureInfo.CreateSpecificCulture(sLanguage)); fVisibility /= 100.0f; rtbContent.AppendText("* Visibility:\t" + fVisibility.ToString() + sUnitDistance + "\n"); rtbContent.AppendText("* Pressure:\t" + xmlRSS["rss"]["channel"]["yweather:atmosphere"].Attributes["pressure"].Value + sUnitPressure + "\n"); sTempVal = xmlRSS["rss"]["channel"]["yweather:atmosphere"].Attributes["rising"].Value; rtbContent.AppendText("* Rising:\t" + sTempVal + " (" + RisingCodeToString(sTempVal) + ")\n"); // Astronomy rtbContent.AppendText("\nAstronomy:\n"); rtbContent.AppendText("* Sunrise:\t" + xmlRSS["rss"]["channel"]["yweather:astronomy"].Attributes["sunrise"].Value + "\n"); rtbContent.AppendText("* Sunset:\t" + xmlRSS["rss"]["channel"]["yweather:astronomy"].Attributes["sunset"].Value + "\n"); // Forecast current day rtbContent.AppendText("\nForecast current day:\n"); rtbContent.AppendText("* Day:\t" + xmlRSS["rss"]["channel"]["item"]["yweather:forecast"].Attributes["day"].Value + "\n"); rtbContent.AppendText("* Date:\t" + xmlRSS["rss"]["channel"]["item"]["yweather:forecast"].Attributes["date"].Value + "\n"); rtbContent.AppendText("* Low:\t" + xmlRSS["rss"]["channel"]["item"]["yweather:forecast"].Attributes["low"].Value + sUnitTemperature + "\n"); rtbContent.AppendText("* High:\t" + xmlRSS["rss"]["channel"]["item"]["yweather:forecast"].Attributes["high"].Value + sUnitTemperature + "\n"); rtbContent.AppendText("* Text:\t" + xmlRSS["rss"]["channel"]["item"]["yweather:forecast"].Attributes["text"].Value + "\n"); sTempVal = xmlRSS["rss"]["channel"]["item"]["yweather:forecast"].Attributes["code"].Value; rtbContent.AppendText("* Code:\t" + sTempVal + " (" + ConditionCodeToString(sTempVal) + ")\n"); // Forecast next day rtbContent.AppendText("\nForecast next day:\n"); rtbContent.AppendText("* Day:\t" + xmlRSS["rss"]["channel"]["item"]["yweather:forecast"].NextSibling.Attributes["day"].Value + "\n"); rtbContent.AppendText("* Date:\t" + xmlRSS["rss"]["channel"]["item"]["yweather:forecast"].NextSibling.Attributes["date"].Value + "\n"); rtbContent.AppendText("* Low:\t" + xmlRSS["rss"]["channel"]["item"]["yweather:forecast"].NextSibling.Attributes["low"].Value + sUnitTemperature + "\n"); rtbContent.AppendText("* High:\t" + xmlRSS["rss"]["channel"]["item"]["yweather:forecast"].NextSibling.Attributes["high"].Value + sUnitTemperature + "\n"); rtbContent.AppendText("* Text:\t" + xmlRSS["rss"]["channel"]["item"]["yweather:forecast"].NextSibling.Attributes["text"].Value + "\n"); sTempVal = xmlRSS["rss"]["channel"]["item"]["yweather:forecast"].NextSibling.Attributes["code"].Value; rtbContent.AppendText("* Code:\t" + sTempVal + " (" + ConditionCodeToString(sTempVal) + ")\n"); // Description (simple HTML) rtbContent.AppendText("\nDescription (simple HTML):\n"); rtbContent.AppendText(xmlRSS["rss"]["channel"]["item"]["description"].InnerText + "\n"); } /// <summary> /// konvertiert den Code für Rising (0,1,2) zu einem string /// </summary> /// <param name="sRisingCode">0, 1, 2</param> /// <returns>string</returns> private string RisingCodeToString(string sRisingCode) { string sRC = string.Empty; switch (sRisingCode) { case "0": sRC = "steady"; break; case "1": sRC = "rising"; break; case "2": sRC = "falling"; break; } return sRC; } /// <summary> /// konvertiert Condition zu string /// </summary> /// <param name="sConditionCode">Condition</param> /// <returns>string</returns> private string ConditionCodeToString(string sConditionCode) { string sCC = string.Empty; switch (sConditionCode) { case "0": sCC = "tornado"; break; case "1": sCC = "tropical storm"; break; case "2": sCC = "hurricane"; break; case "3": sCC = "severe thunderstorms"; break; case "4": sCC = "thunderstorms"; break; case "5": sCC = "mixed rain and snow"; break; case "6": sCC = "mixed rain and sleet"; break; case "7": sCC = "mixed snow and sleet"; break; case "8": sCC = "freezing drizzle"; break; case "9": sCC = "drizzle"; break; case "10": sCC = "freezing rain"; break; case "11": sCC = "showers"; break; case "12": sCC = "showers"; break; case "13": sCC = "snow flurries"; break; case "14": sCC = "light snow showers"; break; case "15": sCC = "blowing snow"; break; case "16": sCC = "snow"; break; case "17": sCC = "hail"; break; case "18": sCC = "sleet"; break; case "19": sCC = "dust"; break; case "20": sCC = "foggy"; break; case "21": sCC = "haze"; break; case "22": sCC = "smoky"; break; case "23": sCC = "blustery"; break; case "24": sCC = "windy"; break; case "25": sCC = "cold"; break; case "26": sCC = "cloudy"; break; case "27": sCC = "mostly cloudy (night)"; break; case "28": sCC = "mostly cloudy (day)"; break; case "29": sCC = "partly cloudy (night)"; break; case "30": sCC = "partly cloudy (day)"; break; case "31": sCC = "clear (night)"; break; case "32": sCC = "sunny"; break; case "33": sCC = "fair (night)"; break; case "34": sCC = "fair (day)"; break; case "35": sCC = "mixed rain and hail"; break; case "36": sCC = "hot"; break; case "37": sCC = "isolated thunderstorms"; break; case "38": sCC = "scattered thunderstorms"; break; case "39": sCC = "scattered thunderstorms"; break; case "40": sCC = "scattered showers"; break; case "41": sCC = "heavy snow"; break; case "42": sCC = "scattered snow showers"; break; case "43": sCC = "heavy snow"; break; case "44": sCC = "partly cloudy"; break; case "45": sCC = "thundershowers"; break; case "46": sCC = "snow showers"; break; case "47": sCC = "isolated thundershowers"; break; case "3200": sCC = "not available"; break; } return sCC; }