分为两个部分——调用以及实现,并且由于不想折腾,直接使用了 Console 来调用。
通过firefox直接调用
Main 入口,调用以及输出
调用部分没什么好说的,主要是针对 dynamic 类型的数据进行遍历输出。
using System;
namespace ConsoleWeather
{
internal class Program
{
private static void Main(string[] args)
{
var weather = Weather.GetWeather("杭州");
foreach (var day in weather.data.forecast)
{
Console.WriteLine(day);
}
Console.ReadKey();
}
}
}
实现部分
- 构建 Http 协议进行 Get 请求
- 需要注意的一点是返回的数据经过了 gzip 压缩(加密)
- 于是用到了微软自带一个 GZipStream 的解压缩类
- 最后通过 Newtonsoft.Json 中的 JsonConvert.DeserializeObject 转为 dynamic 方便操作
using Newtonsoft.Json; //JsonConvert
using System.IO; //Stream、StreamReader
using System.IO.Compression; //GZipStream
using System.Net; //WebRequest、WebResponse
namespace ConsoleWeather
{
public static class Weather
{
private const string Url = "http://wthrcdn.etouch.cn/weather_mini?city=";
public static dynamic GetWeather(string city)
{
string url = Url + city;
//Get
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
//Content-Encoding:gzip
Stream stream = response.GetResponseStream();
string json = Decompress(stream);
return JsonConvert.DeserializeObject(json);
}
private static string Decompress(Stream stream)
{
GZipStream gZip = new GZipStream(stream, CompressionMode.Decompress);
StreamReader sr = new StreamReader(gZip);
return sr.ReadToEnd();
}
}
}