如何在C#中使用Weather API [英] How to use weather api in c#

查看:82
本文介绍了如何在C#中使用Weather API的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想实施天气信息,该信息将向我显示取决于我的经度和纬度的结果。

I want to implement weather information which will show me results that depends on my longitude and latitude.

我的应用正在从GPS获取坐标,因此获取坐标不是问题。唯一的事情是,我想显示离我最近的城市的一些天气信息,并且它具有天气信息。

My app is getting coordinates from GPS so getting them is not a problem. Only thing is, I want to show some weather information for the city that is nearest me and that it has weather info.

能给我一些想法和解决方案吗?

Can you give me some ideas and solutions.

您如何看待Google Weather API?

What do you think about google weather API?

如何使它搜索最近的位置以及如何

How to make this to search for the nearest and how to give to this code lat and long.

public static void GoogleWeather(string location)  
    {  
        HttpWebRequest GoogleRequest;  
        HttpWebResponse GoogleResponse = null;  
        XmlDocument GoogleXMLdoc = null;  
        try  
        {  
            GoogleRequest = (HttpWebRequest)WebRequest.Create("http://www.google.com/ig/api?weather=" + string.Format(location));  
            GoogleResponse = (HttpWebResponse)GoogleRequest.GetResponse();  
            GoogleXMLdoc = new XmlDocument();  
            GoogleXMLdoc.Load(GoogleResponse.GetResponseStream());  

            XmlNode root = GoogleXMLdoc.DocumentElement;  

            XmlNodeList nodeList1 = root.SelectNodes("weather/forecast_information");  
            HttpContext.Current.Response.Write("<b>City : " + nodeList1.Item(0).SelectSingleNode("city").Attributes["data"].InnerText + "</b>");  

            XmlNodeList nodeList = root.SelectNodes("weather/current_conditions");  
            HttpContext.Current.Response.Write(" 
");  
            HttpContext.Current.Response.Write(" 
<table class="bordered" cellpadding="5"> 
<tbody><tr><td><b><big><nobr>" + nodeList.Item(0).SelectSingleNode("temp_c").Attributes["data"].InnerText + " °C | " + nodeList.Item(0).SelectSingleNode("temp_f").Attributes["data"].InnerText + " °F</nobr></big></b>");  
            HttpContext.Current.Response.Write("<b>Current:</b> " + nodeList.Item(0).SelectSingleNode("condition").Attributes["data"].InnerText + "");  
            HttpContext.Current.Response.Write("" + nodeList.Item(0).SelectSingleNode("wind_condition").Attributes["data"].InnerText + "");  
            HttpContext.Current.Response.Write(nodeList.Item(0).SelectSingleNode("humidity").Attributes["data"].InnerText);  
            nodeList = root.SelectNodes("descendant::weather/forecast_conditions");  
            foreach (XmlNode nod in nodeList)  
            {  
                HttpContext.Current.Response.Write("</td> 
<td align="center">" + nod.SelectSingleNode("day_of_week").Attributes["data"].InnerText+ "");  
                HttpContext.Current.Response.Write("<img src="http://www.google.com" + nod.SelectSingleNode("icon").Attributes["data"].InnerText + "" alt="" + nod.SelectSingleNode("condition").Attributes["data"].InnerText + "">");  
                HttpContext.Current.Response.Write(nod.SelectSingleNode("low").Attributes["data"].InnerText + "°F | ");  
                HttpContext.Current.Response.Write(nod.SelectSingleNode("high").Attributes["data"].InnerText + "°F");  
            }  
            HttpContext.Current.Response.Write("</td> 
</tr> 
</tbody></table> 

");  
        }  
        catch (System.Exception ex)  
        {  
            HttpContext.Current.Response.Write(ex.Message);  
        }  
        finally  
        {  
            GoogleResponse.Close();  
        }  
    }  


推荐答案

I

我决定选择Wunderground,因为Google Weather出现了太多问题。 *编辑,我在奇妙的地下室下面添加了一个工作的google示例。谷歌api需要一个城市名称或一个邮政编码。

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示例

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;                         
                    }
                }       
            }
            }

这篇关于如何在C#中使用Weather API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆