分为两个部分——调用以及实现,并且由于不想折腾,直接使用了 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. 一个电商项目的Web服务化改造2:现有项目的5个问题

         最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA.      有点挑战,做完了,会有很大进步, 1.现有项目的问题   1.1代码风格不统一     不同的 ...

  2. Spring MVC 单元测试Demo

    @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(locations={" ...

  3. 【无限滚动加载数据】—infinite-scroll插件的使用

    网上对于infinite-scroll插件使用的例子不多.但由于它的出现,鼓吹了瀑布流形式的页面展示方式,所以不得不了解了解这种新的分页方式. 官网上有对infinite-scroll的详细描述,但一 ...

  4. 改动虚拟机镜像的rootpassword

    有时从网上下载的虚拟机镜像.没有rootpassword,必须通过秘钥登录.然后秘钥又须要麻烦的注入到里面去.想用,却无法登录.非常头痛.本文提供一种通过改动虚拟机镜像里面的/etc/shadow文件 ...

  5. MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应

    MFC小程序截图: 一.在MFC中简单使用WebBrowser的ActiveX插件的方法: 见博文:  http://blog.csdn.net/supermanking/article/detail ...

  6. 《Effective C++ 》学习笔记——条款12

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  7. java中statickeyword

    1.static变量 依照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:还有一种是没有被static修饰的变量,叫实例变量. 两者的差别是: 对于静态变量 ...

  8. 使用Django框架实现游戏站点搭建

    完整project链接点击打开链接 上一篇中我们使用了Javascript和Html5实现了弹球游戏.而在本文中我们希望以其为基础实现游戏站点,可以实现用户的注冊登录.游戏成绩记录,排名显示.微博分享 ...

  9. Dubbo实战(一)高速入门

    Dubbo是什么? Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封 ...

  10. oc46--nonatomic, retain

    // // Person.h #import <Foundation/Foundation.h> #import "Room.h" #import "Car. ...