分为两个部分——调用以及实现,并且由于不想折腾,直接使用了 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();
        }
    }
}

实现部分

  1. 构建 Http 协议进行 Get 请求
  2. 需要注意的一点是返回的数据经过了 gzip 压缩(加密)
  3. 于是用到了微软自带一个 GZipStream 的解压缩类
  4. 最后通过 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();
        }
    }
}

闲着无聊时写的一个调用天气 API 的小 Demo的更多相关文章

  1. 用c#写的一个局域网聊天客户端 类似小飞鸽

    用c#写的一个局域网聊天客户端 类似小飞鸽 摘自: http://www.cnblogs.com/yyl8781697/archive/2012/12/07/csharp-socket-udp.htm ...

  2. 一个基于ES5的vue小demo

    由于现在很多vue项目都是基于ES6开发的,而我学vue的时候大多是看vue官网的API,是基于ES5的,所以对于刚接触项目的我来说要转变为项目的模块化写法确实有些挑战.因此,我打算先做一个基于ES5 ...

  3. 写了一个常规性生成merge 的小脚本

    现在使用数据库来写存储过程,动不动参数就会用到xml ,当然罗,优势也很明显,参数相对固定,而且灵活,如果要修改或者什么的,中间接口层也不需要做变化,只需要修改封装的存储过程以及程序传参就ok了. 随 ...

  4. 一个自定义线程池的小Demo

    在项目中如果是web请求时候,IIS会自动分配一个线程来进行处理,如果很多个应用程序共享公用一个IIS的时候,线程分配可能会出现一个问题(当然也是我的需求造成的) 之前在做项目的时候,有一个需求,就是 ...

  5. 聊聊UDP、TCP和实现一个简单的JAVA UDP小Demo

    最近真的比较忙,很久就想写了,可是一直苦于写点什么,今天脑袋灵光一闪,觉得自己再UDP方面还有些不了解的地方,所以要给自己扫盲. 好了,咱们进入今天的主题,先列一下提纲: 1. UDP是什么,UDP适 ...

  6. 初学shell,今天遇到由wget下载到本地的网页源代码的乱码问题,无聊的写了一个转码的脚本

    今天用wget想下载文件,结果下载了一堆本地的index.html文件,一查看全是乱码,然后百度了一下,网页的编码格式大概有三种: 1.utf-8 2.gb2312 3.gbk 要在网页源码中的< ...

  7. 写了一个web使用向导的小插件

    运行效果: 引入插件: <link rel="stylesheet" href="ez-guide.css"> <script src=&qu ...

  8. 【原创】自己动手写的一个查看函数API地址的小工具

    C开源代码如下: #include <stdio.h> #include <windows.h> #include <winbase.h> typedef void ...

  9. 用Go语言写了一个电脑搜索文件的小东西

    package main import ( "bytes" "fmt" "os" "os/exec" "pat ...

随机推荐

  1. Tkinter图形界面设计(GUI)

    [因为这是我第一个接触的GUI图形界面python库,现在也不用了,所以大多数内容都来自之前花 钱买的一些快速入门的内容,可以当作简单的知识点查询使用] 在此声明:内容来自微信公众号GitChat,付 ...

  2. BUPT2017 springtraining(15) #3

    这里这里 A.签到题 #include <cstdio> double a[] = {0.4, 0.16, 0.063, 0.025, 0.010, 0.004}; int main() ...

  3. qwb和李主席

    qwb和李主席 Time Limit: 4 Sec  Memory Limit: 128 MB Description qwb和李主席打算平分一堆宝藏,他们想确保分配公平,可惜他们都太懒了,你能帮助他 ...

  4. ZOJ 3213

    /* ZOJ 3213 好吧,看过那种括号表示法后,就崩溃了,实在受不了.情况复杂,写了两天,人也有点傻X了,只能放弃,转而用最小表示法. 最小表示法不难写: 1)首先,要承认路径上有格子不选的情况, ...

  5. ubuntu 配置静态路由

    原文:http://blog.sina.com.cn/s/blog_6fd8d5d90101f1xy.html -------------------------------------------- ...

  6. but no declaration can be found for element &#39;aop:aspectj-autoproxy&#39;.

    1.错误描写叙述 Multiple annotations found at this line: - cvc-complex-type.2.4.c: The matching wildcard is ...

  7. UVA 10069 Distinct Subsequences(DP)

    考虑两个字符串,我们用dp[i][j]表示字串第到i个和字符串到第j个的总数,由于字串必须连续 因此dp[i][j]能够有dp[i][j-1]和dp[i-1][j-1]递推而来,而不能由dp[i-1] ...

  8. MySQL具体解释(15)-----------海量数据解说

    第1章  引言 随着互联网应用的广泛普及,海量数据的存储和訪问成为了系统设计的瓶颈问题. 对于一个大型的互联网应用.每天几十亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的 ...

  9. 一个简单RPC框架是怎样炼成的(I)——开局篇

    开场白,这是一个关于RPC的相关概念的普及篇系列,主要是通过一步步的调整,提炼出一个相对完整的RPC框架. RPC(Remote Procedure Call Protocol)--远程过程调用协议, ...

  10. SuperSocketClientEngine

    https://github.com/kerryjiang/SuperSocket.ClientEngine TcpClientSession的用法 https://github.com/kerryj ...