控制台调用天气API例子

第一步,新建控制台应用程序,然后新建类:WeatherReport:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class WeatherReport
    {
        public string date { get; set; }

        public long temp { get; set; }

        public string text { get; set; }


    }
}

 第二步,要获取需要的城市的woeid(where on earch id),比如北京是:

https://www.metaweather.com/api/location/search/?query=beijing

 

第三步编写Program类:

 woeid在Program类中用的到,URL地址(可复制到浏览器中查看格式内容):

https://query.yahooapis.com/v1/public/yql?q=select%20item%20from%20weather.forecast%20where%20woeid%20in%20(2151330%20)&format=json

 

using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri("https://query.yahooapis.com/v1/public/yql?q=select%20item%20from%20weather.forecast%20where%20woeid%20in%20(2151330%20)&format=json");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

            GetWeather(client).Wait();  
        }

        static async Task GetWeather(HttpClient cons)
        {
            using (cons)
            {
                HttpResponseMessage res = await cons.GetAsync("");

                res.EnsureSuccessStatusCode();
                if (res.IsSuccessStatusCode)
                {
                    string weather = await res.Content.ReadAsStringAsync();

                    JObject jobj = JObject.Parse(weather);
                    JToken jToken = jobj.First;
                    string WeatherState = jToken.First["results"]["channel"]["item"]["condition"].ToString();
                    WeatherReport report = Newtonsoft.Json.JsonConvert.DeserializeObject<WeatherReport>(WeatherState);
                    Console.WriteLine("\n");

                    Console.WriteLine("Weather Station: Beijing");
                    Console.WriteLine("Temperature Details");
                    Console.WriteLine("-----------------------------------------------------------");
                    Console.WriteLine("Temperature (in deg. C): " + (report.temp - 32) * 0.55);// Converted from Fahrenheit to Celsius  
                    Console.WriteLine("Weather State: " + report.text);
                    Console.WriteLine("Applicable Time: " + report.date);
                    Console.ReadLine();
                }
            }
        }  
    }
}

 

 运行结果:

 

posted @ 2018-02-01 09:30  iframe  阅读(852)  评论(0编辑  收藏  举报