[C#] [DLL] YahooWeatherNET - Aktuelles Wetter in deiner Anwendung!

    • Release
    • Open Source

    Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von Mircosofter2206.

      [C#] [DLL] YahooWeatherNET - Aktuelles Wetter in deiner Anwendung!

      YahooWeatherNET

      YahooWeatherNET ist ein kleiner .NET Wrapper für die Yahoo Weather API. Diese bietet detaillierte Wetterinformationen und Vorhersagen für unzählige Orte rund um den Globus.

      Verwendete Programmiersprache und IDE:
      Visual C# (IDE: Visual Studio 2012, 2015)

      Screenshot(s):


      Systemanforderungen:
      .NET Framework 4.0 (mit AsyncTargetingPack)
      oder
      .NET Framework 4.5

      Download:
      YahooWeatherNET_2_0.zip DLL + Beispielprojekt (Version: 2.0.0.0, 656 KB)

      Lizenz/Weitergabe:
      MIT - Siehe GitHub

      Sourcecode:
      github.com/destiny14/YahooWeatherNET

      How to 1: AsyncTargetingPack installieren

      Wenn ihr Version 2.0 der Library unter dem .NET Framework 4.0 verwenden wollt, müsst ihr das AsyncTargetingPack installieren.

      Hinweis: Das AsyncTargetingPack gibt es nur für Visual Studio 2012. Für Visual Studio 2010 gibt es das AsyncCTP, ob die Lib auch damit funktioniert habe ich nicht getestet.

      Schritt 1: Starte Visual Studio und öffne die NuGet-Konsole ("TOOLS" -> "Bibliotheks-Paket-Manager" -> "Paket-Manager-Konsole").

      Schritt 2: Gebe folgenden Befehl ein und drücke Enter:

      Quellcode

      1. Install-Package Microsoft.CompilerServices.AsyncTargetingPack

      Schritt 3: Nachdem die Installation erfolgt ist, muss die Erweiterung noch für das jeweilige Projekt aktiviert werden. Dazu navigierst du nach "TOOLS" -> "Bibliotheks-Paket-Manager" -> "NuGet-Pakete für Projektmappe verwalten...". Klicke dann neben dem Eintrag des AsyncTargetingPacks auf "Verwalten" und wähle die Projekte aus, für welche du das Paket verwenden möchtest. Schließe die Dialoge --> Fertig!

      How to 2: YahooWeatherNET benutzen
      Die Benutzung der Library ist eigentlich sehr simpel:

      C#-Quellcode

      1. using YahooWeatherNET;
      2. public class Main
      3. {
      4. private YahooWeatherProvider m_weatherProvider;
      5. public Main()
      6. {
      7. m_weatherProvider = new YahooWeatherProvider();
      8. }
      9. public async Task GetWeatherAsync()
      10. {
      11. // Ein neues WeatherReport Objekt für den entsprechenden Ort erstellen. Wichtig: Diese Methode ist asynchron,
      12. // da das Umwandeln eines Suchbegriffes zu einer WOEID ein Aufruf an die API ist.
      13. // Wenn bereits eine WOEID vorhanden ist, kann .CreateReport("die woeid"); benutzt werden (synchron).
      14. WeatherReport report = await m_weatherProvider.CreateReportFromLocation("Cologne");
      15. // Das aktuelle Wetter abrufen.
      16. // Dieser Aufruf kann eine UnknownWoeidException und eine WeatherParsingException auslösen, diese sollten abgefangen werden.
      17. WeatherItem wItem = await report.Query();
      18. }
      19. public async Task<string> ResolveLocationToWoeid()
      20. {
      21. // Um manuell einen Suchbegriff zu einer WOEID umzuwandeln, kann die statische LocationResolver Klasse genutzt werden.
      22. return await LocationResolver.ResolveLocationToWoeid("Cologne");
      23. }
      24. }


      How to 3: OAuth Schlüssel erhalten

      Dieser Schritt scheint seit dem 17.07.2016 nicht mehr notwendig zu sein. Die beiden Parameter des Konstruktors können leer gelassen werden.

      Seit dem 15.03.2016 muss sich jede Anwendung gegenüber Yahoo authentifizieren wenn sie API Abfragen machen möchte. Dazu benötigt die Anwendung einen Client-Key und ein Client-Secret. Beides erhält man, wenn man im Yahoo Developer Network eine neue Anwendung anlegt. Dies kann unter folgender Adresse vorgenommen werden: developer.yahoo.com/apps/create/

      Folgende Dinge sind zu beachten:
      - Als "Application Type" muss "Installed Application" gewählt werden
      - Es darf keine "Callback Domain" angegeben werden
      - Bei den "API Permissions" muss kein Haken gesetzt werden!

      Es sollte also wie folgt aussehen:


      Nachdem die Anwendung angelegt wurde werden Key und Secret angezeigt. Diese müssen in die Demo-Applikation eingefügt werden, bevor diese verwendet werden kann.

      C#-Quellcode

      1. static string CONSUMER_KEY = "DEIN_KEY";
      2. static string CONSUMER_SECRET = "DEIN_SECRET";
      3. YahooWeatherProvider m_weatherProvider;
      4. (...)
      5. m_weatherProvider = new YahooWeatherProvider(CONSUMER_KEY, CONSUMER_SECRET);


      Changelog
      -> v 1.0.0.0
      Initial release
      -> v 1.1.0.0
      Benennungen korrigiert
      Location nun GeoCoordinate
      -> v 1.2.0.0
      OAuth Authentifizierung hinzugefügt
      Tippfehler behoben, Refactoring
      -> v 2.0.0.0
      Moar refactoring
      Alle synchronen Aufrufe an die API entfernt
      OAuth jetzt optional
      Alle Requests in YQL überführt.

      Dieser Beitrag wurde bereits 12 mal editiert, zuletzt von „Solaris“ ()

      Die ist natürlich zu beachten. Für Leute die sie nicht selber suchen möchten, hier ein Zitat.

      Terms of Use
      The feeds are provided free of charge for use by individuals and non-profit organizations for personal, non-commercial uses. We ask that you provide attribution to Yahoo! Weather in connection with your use of the feeds.
      If you provide this attribution in text, please use: "Yahoo! Weather." If you provide this attribution with a graphic, please use the Yahoo! Weather logo that we have included in the feed itself.
      We reserve all rights in and to the Yahoo! Weather logo, and your right to use the Yahoo! Weather logo is limited to providing attribution in connection with these RSS feeds.
      Yahoo! also reserves the right to require you to cease distributing these feeds at any time for any reason.


      developer.yahoo.com/weather/#terms
      Mögen jetzt zwar Kleinigkeiten sein: bei der Enum "TemperatureUnit" sind beide Werte falsch geschrieben. Außerdem würde ich mich entweder für lange oder kurze Schreibweise entscheiden. In der Geolocation-Klasse würde ich die beiden Eigenschaften ausschreiben (im Rest des Projekts ist ja auch alles ausgeschrieben), ebenso "WLocation" in der WeatherItem-Klasse.
      Anstatt eine eigene Geolocation-Klasse zu haben, könntest du ja auch die aus dem Framework verwenden:
      msdn.microsoft.com/en-us/libra…cation.geocoordinate.aspx
      Die gibt es zwar erst ab .NET 4.0, aber ist ja egal, da du 4.0 ja eh voraussetzt. ;)

      So könnte man deine Library nahezu nahtlos in Kombination mit dem GeoCoordinateWatcher aus dem System.Device.Location-Namespace verwenden. Ob die Eigenschaften der Lat. und Long. im gleichen Format abgespeichert werden, weiß ich nicht. Das wird wohl eine Fließkommanotation sein. Steht im MSDN:

      MSDN schrieb:

      Latitude can range from -90.0 to 90.0. Latitude is measured in degrees north or south from the equator. Positive values are north of the equator and negative values are south of the equator.
      Keine Ahnung, wie das bei deiner Library ist.

      Aber achtung, nicht mit der Windows.Devices.Geolocation.Geocoordinate-Klasse aus der WinRT verwechseln. ;)

      Edit:
      Ich sehe gerade, dass es in diesem Namespace auch ein Interface für Adressauflösungen gibt. Siehe hier. Im Framework gibt es anscheinend eine Standard-Implementierung zur Adressauflösung. Die befindet hier und hat TAP-Support (obvs.). Ich vermute mal, dass die irgendwelche MS-Services ala Bingmaps dafür verwendet. Ich schaue gleich mal nach.
      Vielleicht kannst du ja was damit anfangen.

      Edit2:
      Die Klasse ist wohl dazu da, um Geokoordinaten in Adressen aufzulösen. Die Adresse hat den Typen System.Device.Location.CivicAddress. Ich denke mal, dass das genau das Gegenteil macht, was gebraucht wird. ;)
      Woher sich der Resolver die Daten holt, habe ich noch nicht finden können. Irgendwie keine Spur von Bing o. Ä.
      Von meinem iPhone gesendet

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „nikeee13“ ()

      Download-Link führt zu Server-Fehler:

      Server Error in '/' Application.
      The resource cannot be found.
      Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.

      Requested URL: /YahooWeatherNET/YahooWeatherNET.zip
      Hallo,
      ich nutze seit einiger Zeit die oben genannte DLL zum abrufen der Wetterdaten.
      Seit dem 15.03.16 hat Yahoo eine Autorisierung eingeführt, weshalb die Abfrage nun nicht mehr funktioniert...
      Der Sourcecode für die DLL ist aber nicht öffentlich, damit ich dies selbst anpassen könnte, oder?

      Gruß
      Hast du eigentlich schon nach Alternativen gesucht, nicht dass ich hier Abwerben will, nur das Projekt ist mehr als 3 Jahre alt.
      codeproject.com/Articles/20429/Yahoo-Weather-Reader-Wrapper
      codeproject.com/Articles/30768…sing-VB-NET-and-Yahoo-RSS
      stackoverflow.com/questions/16…eather-forecast-in-vb-net

      Die könntest du dann alle anpassen, falls Solaris das Projekt nicht mehr besitzt, oder anderes.
      Mfg: Gather
      Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


      Hallo zusammen,

      ich hätte gar nicht gedacht, dass die DLL genutzt wird, freut mich. Ich werde die Authentifizierung einfügen und den Spaß aktualisieren. Dann werde ich den Source Code auch direkt öffentlich machen.

      Schön wäre es, wenn Yahoo zuerst die Dokumentation aktualisiert bevor sie ein neues Feature einbauen.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Solaris“ ()

      Solaris schrieb:

      Hallo zusammen,

      ich hätte gar nicht gedacht, dass die DLL genutzt wird, freut mich.


      Hallo,
      ich habe einen Tablet-PC den ich zur Visualisierung der Hausautomation nutze, dort habe ich vor ca. 2 Jahren die dll implemetiert.
      Stündlich rufe ich damit die Wetterdaten ab, was bis dato super funktioniert hat. :)
      Supie das Du die Anpassung vornehmen möchtest und dann auch den Quellcode zur Verfügung stellen willst. Ich freue mich drauf...
      Ah, sehr gut!

      @bluesky81 Ich habe jetzt die Lib aktualisiert, sie nimmt nun einen Client-Key und das Client-Secret entgegen, welches man von Yahoo erhält wenn man eine Anwendung im Developer Network anlegt. Dazu habe ich im ersten Post auch eine kurze Anleitung geschrieben. Den Source der Lib liefere ich in Kürze nach.

      Edit: Ich sehe gerade, das Projekt welches ich jetzt bearbeitet habe war von Version 1.0. Die Änderungen von 1.1 werden also noch eingebaut (betrifft eigentlich nur die GeoCoordinate).

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Solaris“ ()

      Solaris schrieb:


      @bluesky81 Ich habe jetzt die Lib aktualisiert, sie nimmt nun einen Client-Key und das Client-Secret entgegen, welches man von Yahoo erhält wenn man eine Anwendung im Developer Network anlegt. Dazu habe ich im ersten Post auch eine kurze Anleitung geschrieben. Den Source der Lib liefere i


      Richtig geil!
      Das ging ja super schnell! :)
      Habe es gerade eingebaut und es funktioniert wie vorher... Vielen Dank!!!
      Hallo zusammen,

      ich habe soeben ein größeres Update für die Library veröffentlicht. Ich habe den kompletten Code refactored, so dass er nun etwas übersichtlicher sein sollte. Neu ist die weitere Kapselung der Wetterinformationen in ein WeatherReport Objekt. So ist sichergestellt, dass der YahooWeatherProvider wirklich nur ein Provider ist und nicht für jede neue Location neu erstellt werden muss.

      Außerdem habe ich alle Requests in das neue YQL (Yahoo Query Language) Format überführt und das Exception Handling verbessert.

      Die wichtigste Änderung betrifft wohl die synchronen Funktionsaufrufe. Diese wurden nämlich komplett entfernt. Der Zugriff auf die API Funktionen kann nur noch über asnychrone Methoden erfolgen.

      Download: github.com/destiny14/YahooWeatherNET/releases

      Achso: Es scheint als wäre eine Authentifizierung über OAuth nicht mehr notwendig. Die Library unterstützt diese weiterhin, Secret und Key können aber leer gelassen werden.

      Hallo ^^

      Sorry, dass ich so doof frage, aber wie nutzt man die Funktionen richtig unter VB .NET?
      Man bekommt nämlich als Rückgabewert z.B. kein Wert von Typ String, sondern einen Rückgabewert vom Typ System.Threading.Tasks.Task(Of String)
      Ich weis zwar warum man diese benutzt(asyncronalität), habe aber nicht den geringsten Plan, wie man diese einsetzt.
      Vielen Dank im vorraus,

      Mircosofter
      Mit dem Await-Schlüsselwort. Siehe async-await.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: