C# :: Aufgabe #78

3 Lösungen Lösungen öffentlich

Wetterdaten abfragen und anzeigen

Anfänger - C# von pocki - 27.11.2014 um 19:00 Uhr
Schreibe ein Programm, welches Wetterdaten von einem Dienst abruft und einige Werte davon ausgibt.
Das Programm soll durch die Benutzereingabe die Stadt entgegen nehmen und zu dieser die aktuellen Wetterdaten ausgeben.

Vorschlag für einen einfachen und kostenlosen Dienst: openweathermap.org

Lösungen:

vote_ok
von Mexx (2370 Punkte) - 14.01.2015 um 14:38 Uhr
Hier als einfache Konsolenanwendung, die sich auf die aktuellen Daten beschränkt...

Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Xml;
using System.Xml.Linq;
using System.IO;

namespace WetterChecker
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Geben Sie den Stadtnamen und das Länderkürzel ein (bsp. \"Berlin, de\")");
            string eingabe = Console.ReadLine();
            string[] parameter = eingabe.Split(',');
            string url = @"http://api.openweathermap.org/data/2.5/forecast?q=" + parameter[0].Trim() + "," + parameter[1].Trim() + "&mode=xml";

            try
            {
                XElement root = XElement.Load(url, LoadOptions.PreserveWhitespace);

                if (root != null)
                {
                    XElement location = root.Element("location");
                    XElement stadt = location.Element("name");
                    XElement land = location.Element("country");

                    XAttribute sonnenaufgang = root.Element("sun").Attribute("rise");
                    XAttribute sonnenuntergang = root.Element("sun").Attribute("set");
                    DateTime datum = DateTime.Parse((string)sonnenaufgang);
                    DateTime datum2 = DateTime.Parse((string)sonnenuntergang);

                    XElement vorhersage = root.Element("forecast");
                    XElement aktuell = vorhersage.FirstNode.NextNode as XElement;

                    XElement wind = vorhersage.Element("time").Element("windDirection");
                    XElement temperatur = vorhersage.Element("time").Element("temperature");
                    XElement luftdruck = vorhersage.Element("time").Element("pressure");
                    XElement luftfeuchtigkeit = vorhersage.Element("time").Element("humidity");
                    XElement wolken = vorhersage.Element("time").Element("clouds");


                    Console.WriteLine("\nStadt: " + (string)stadt + "\nLand: " + (string)land + "\n\nDatum: " + datum.ToShortDateString() + "\nSonnenaufgang: " + datum.AddHours(1).ToShortTimeString() +
                                      " Uhr \nSonnenuntergang: " + datum2.AddHours(1).ToShortTimeString() + " Uhr \nWindrichtung: " + (string)wind.Attribute("name") + "\nTemperatur: " +
                                      (string)temperatur.Attribute("value") + "° " + (string)temperatur.Attribute("unit") + "\nLuftdruck: " + (string)luftdruck.Attribute("value") + " " +
                                      (string)luftdruck.Attribute("unit") + "\nLuftfeuchtigkeit: " + (string)luftfeuchtigkeit.Attribute("value") + (string)luftfeuchtigkeit.Attribute("unit") +
                                      "\nWetter: " + (string)wolken.Attribute("value") + "\nRegenwahrscheinlichkeit: " + (string)wolken.Attribute("all") + (string)wolken.Attribute("unit"));
                }
                else
                {
                    Console.WriteLine("Zu Ihren Angaben wurden keine Wetterdaten gefunden \n\n");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadKey();
        }
    }
}
vote_ok
von DBqFetti (2480 Punkte) - 22.06.2015 um 19:48 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Xml;
using System.Net;

namespace Wetterdaten {
	class Program {
		static void Main() {
			Console.Write("Stadt>");
			Uri Url = new Uri("http://api.openweathermap.org/data/2.5/weather?&mode=xml&lang=de&q=" + Console.ReadLine());
			XmlDocument Weather = XmlFrom(Url);

			if (Weather == null) {
				Console.WriteLine("Abfrage fehlerhaft.");
				Console.ReadKey(false);
				return;
			}

			Console.WriteLine("\nGefunden: " + Weather.SelectSingleNode("current/city").Attributes["name"].Value);
			Console.WriteLine("Wetter: " + Weather.SelectSingleNode("current/weather").Attributes["value"].Value);
			Console.ReadKey(false);
		}

		static XmlDocument XmlFrom(Uri Url) {
			XmlDocument XmlToReturn;
			HttpWebRequest request = WebRequest.Create(Url) as HttpWebRequest;
			HttpWebResponse response;

			try {
				response = request.GetResponse() as HttpWebResponse;
			}
			catch (WebException) {
				return null;
			}

			XmlToReturn = new XmlDocument();
			XmlToReturn.Load(response.GetResponseStream());
			return XmlToReturn;
		}
	}
}

vote_ok
von KawaiiShox (330 Punkte) - 23.06.2017 um 14:16 Uhr
Durch die Konvertierung der erhaltenen json-Daten in ein "WeatherObject" ist es theoretisch möglich beliebige Daten auszugeben. Ich habe mich hier der Einfachheit halber auf die nötigsten beschränkt.


Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.NetworkInformation;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
using System.Numerics;
using System.IO;
using System.Net;
using System.Diagnostics;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Microsoft.Office.Interop.Excel;
using System.Drawing;


namespace KonsolenTests
{
    class Program
    { 
        public const string APIKey = "63fc4a1c3c719dcd2c8ab677f6ff0820";

        static void Main(string[] args)
        {

            Console.WriteLine("Geben einen Ort ein (z.B. Berlin)");
            string Ort = Console.ReadLine();
            WeatherObject weather = getWetterByName(Ort);
            Console.WriteLine("Das Wetter in " + Ort + " ist folgendermaßen:");
            Console.WriteLine("Temperatur: " + (weather.main.temp - 273) + " C");
            Console.WriteLine("Luftdruck: " + weather.main.pressure + " hPa");
            Console.WriteLine("Luftfeuchtigkeit: " + weather.main.humidity + " %");
            Console.WriteLine("Maximale Temperatur: " + (weather.main.temp_max - 273) + " C");
            Console.WriteLine("Minimale Temperatur: " + (weather.main.temp_min -273) + " C");
            Console.WriteLine("Beschreibung: " + weather.weather[0].description);
            Console.ReadLine();            
        }
		
		//Api-Aufruf
        public static WeatherObject getWetterByName(string Ort)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("http://api.openweathermap.org/data/2.5/weather?q=");
            sb.Append(Ort +"&APPID=");
            sb.Append(APIKey);
            WebRequest request = WebRequest.Create(sb.ToString());
            request.Credentials = CredentialCache.DefaultCredentials;
            WebResponse response = request.GetResponse();
            Stream dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            string responseFromServer = reader.ReadToEnd();
            reader.Close();
            response.Close();
            return new JavaScriptSerializer().Deserialize<WeatherObject>(responseFromServer);
        }

    }
	
	
	//Nötige Klassen zum konvertieren der erhaltenen Wetterdaten im json-Format in ein "WeatherObject"-Objekt

    public class Coord
    {
        public double lon { get; set; }
        public double lat { get; set; }
    }

    public class Weather
    {
        public int id { get; set; }
        public string main { get; set; }
        public string description { get; set; }
        public string icon { get; set; }
    }

    public class Main
    {
        public double temp { get; set; }
        public int pressure { get; set; }
        public int humidity { get; set; }
        public double temp_min { get; set; }
        public double temp_max { get; set; }
    }

    public class Wind
    {
        public double speed { get; set; }
        public int deg { get; set; }
    }

    public class Clouds
    {
        public int all { get; set; }
    }

    public class Sys
    {
        public int type { get; set; }
        public int id { get; set; }
        public double message { get; set; }
        public string country { get; set; }
        public int sunrise { get; set; }
        public int sunset { get; set; }
    }

    public class WeatherObject
    {
        public Coord coord { get; set; }
        public List<Weather> weather { get; set; }
        public string @base { get; set; }
        public Main main { get; set; }
        public int visibility { get; set; }
        public Wind wind { get; set; }
        public Clouds clouds { get; set; }
        public int dt { get; set; }
        public Sys sys { get; set; }
        public int id { get; set; }
        public string name { get; set; }
        public int cod { get; set; }
    }

}

1809848

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.