How to use weather api in c# [closed]

落爺英雄遲暮 提交于 2019-12-03 22:20:15

I actually had a similar issue a while back.

I decided to go with Wunderground as I had too many issues with Google Weather. *Edit, I added a working google example below the wunderground one. The google api requires a city name or a zip code it seems.

Here is my example, pardon my sloppy code, typing this from memory.

public static DayOfWeek Wunderground(string latlong)
    {
        //Insert your API key in the below URL
        //string latlong = "37.8,-122.4";
        string url = "http://api.wunderground.com/api/*insertyourapikeyhere*/geolookup/conditions/forecast/q/"+latlong+".xml";

        HttpWebRequest web = (HttpWebRequest)WebRequest.Create(url);
        web.UseDefaultCredentials = true;
        web.PreAuthenticate = true;
        web.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.168 Safari/535.19";
        web.GetResponse();
        //Get Dopplar Image
        var dop = "http://api.wunderground.com/api/7dca468f5dd2ff1b/animatedradar/q/TX/Houston.gif?newmaps=1&timelabel=1&width=640&height=480&timelabel.y=10&num=15&delay=50";
        WebClient wc = new WebClient();
        wc.DownloadFile(dop, "dop.gif");

        //Prepare my custom property
        var d = new WeatherLib.DayOfWeek();
        d.Current = new WDay();
        WDay forecast = new WDay();
        var conditions = d;
        var xmlConditions = new XmlDocument();

        //download the api xml
        XDocument api = XDocument.Load(url);
        api.Save("api.xml");
        xmlConditions.Load(string.Format(@"api.xml"));

        XmlNodeList list = xmlConditions.SelectNodes("/response/current_observation");
        WDay current = d.Current;

        //Parse out the XML data
        foreach (XmlNode node in list)
        {
            current.WeatherText = node.SelectSingleNode("weather").InnerText;
            current.TempCurrentF = node.SelectSingleNode("temp_f").InnerText;
            current.TempCurrentC = node.SelectSingleNode("temp_c").InnerText;
            current.Humidity = node.SelectSingleNode("relative_humidity").InnerText;
            current.WindDirection = node.SelectSingleNode("wind_dir").InnerText;
            current.WindSpeedM = node.SelectSingleNode("wind_mph").InnerText;
            current.WindSpeedK = node.SelectSingleNode("wind_kph").InnerText;
            current.Barometer = node.SelectSingleNode("pressure_mb").InnerText;
            current.HeatIndexF = node.SelectSingleNode("heat_index_f").InnerText;
            current.HeatIndexC = node.SelectSingleNode("heat_index_c").InnerText;
            current.WindChill = node.SelectSingleNode("windchill_string").InnerText;
            current.UVIndex = node.SelectSingleNode("UV").InnerText;
            current.RainAmount = node.SelectSingleNode("precip_today_in").InnerText;
            current.Visibility = node.SelectSingleNode("visibility_mi").InnerText;
            current.DewPoint = node.SelectSingleNode("dewpoint_f").InnerText;


        }return d;
    }

Google example

public static DayOfWeek Google(string zip)
    {
        string urlstring = "http://www.google.com/ig/api?weather="+zip;
        var d = new WeatherLib.DayOfWeek();
        d.Monday = new WDay();
        d.Tuesday = new WDay();
        d.Wednesday = new WDay();
        d.Thursday = new WDay();
        d.Friday = new WDay();
        d.Saturday = new WDay();
        d.Sunday = new WDay();
        d.Current = new WDay();

        WDay forecast = new WDay();
        var conditions = d;
        var xmlConditions = new XmlDocument();
        XDocument api = XDocument.Load(urlstring);
        api.Save("api.xml");
        xmlConditions.Load(string.Format(@"api.xml"));
        if (xmlConditions.SelectSingleNode("xml_api_reply/weather/problem_cause") != null)
        {
            conditions = null;
        }
        else
        {

            var singleNode = xmlConditions.SelectSingleNode("xml_api_reply/weather/current_conditions/condition");
            if (singleNode != null)
                if (singleNode.Attributes != null)
                    conditions.Current.WeatherText =
                        singleNode.Attributes[
                            "data"].InnerText;
            var node = xmlConditions.SelectSingleNode("xml_api_reply/weather/current_conditions/temp_c");
            if (node != null)
                if (node.Attributes != null)
                    conditions.Current.TempCurrentC =
                        node.Attributes["data"]
                            .InnerText;
            var selectSingleNode1 = xmlConditions.SelectSingleNode("xml_api_reply/weather/current_conditions/temp_f");
            if (selectSingleNode1 != null)
                if (selectSingleNode1.Attributes != null)
                    conditions.Current.TempCurrentF =
                        selectSingleNode1.Attributes["data"]
                            .InnerText;
            var singleNode1 = xmlConditions.SelectSingleNode("xml_api_reply/weather/current_conditions/humidity");
            if (singleNode1 != null)
                if (singleNode1.Attributes != null)
                    conditions.Current.Humidity =
                        singleNode1.Attributes[
                            "data"].InnerText;
            var xmlNode1 = xmlConditions.SelectSingleNode("xml_api_reply/weather/current_conditions/wind_condition");
            if (xmlNode1 != null)
                if (xmlNode1.Attributes != null)
                    conditions.Current.WindSpeedM =
                        xmlNode1.Attributes
                            ["data"].InnerText;

            if (xmlConditions.SelectSingleNode("xml_api_reply/weather/problem_cause") != null)
            {
                conditions = null;
            }
            else
            {
                XmlNodeList list = xmlConditions.SelectNodes("/xml_api_reply/weather");
                foreach(XmlNode node1 in list)
                {
                    XmlNodeList days = node1.SelectNodes("forecast_conditions");
                    foreach (XmlNode doo in days)
                    {
                        string dow = doo.SelectSingleNode("day_of_week").Attributes["data"].InnerText;
                        switch (dow)
                        {
                            case "Mon":
                                forecast = d.Monday;
                                break;
                            case "Tue":
                                forecast = d.Tuesday;
                                break;
                            case "Wed":
                                forecast = d.Wednesday;
                                break;
                            case "Thu":
                                forecast = d.Thursday;
                                break;
                            case "Fri":
                                forecast = d.Friday;
                                break;
                            case "Sat":
                                forecast = d.Saturday;
                                break;
                            case "Sun":
                                forecast = d.Sunday;
                                break;
                        }
                        forecast.WeatherText = doo.SelectSingleNode("condition").Attributes["data"].InnerText;
                        forecast.TempHiF = doo.SelectSingleNode("high").Attributes["data"].InnerText;                         
                    }
                }       
            }
            }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!