分为两个部分——调用以及实现,并且由于不想折腾,直接使用了 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. 【1657: [蓝桥杯][算法训练VIP]】统计单词个数

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 设dp[i][j]表示前i个字符分成j个部分的最多匹配单词个数. 则dp[i][j] = dp[prei][j-1] + get_num(pr ...

  2. SCU Right turn

    Right turn frog is trapped in a maze. The maze is infinitely large and divided into grids. It also c ...

  3. noip模拟赛 正方形

    题目描述在一个10000*10000的二维平面上,有n颗糖果.LYK喜欢吃糖果!并且它给自己立了规定,一定要吃其中的至少C颗糖果!事与愿违,LYK只被允许圈出一个正方形,它只能吃在正方形里面的糖果.并 ...

  4. Flume基本概念

    1         Apache Flume 1.1         概述 Flume是Cloudera提供的一个高可用,高可靠的,分布式的海量日志采集.聚合和传输的软件. Flume的核心是把数据从 ...

  5. poj 3468 A Simple Problem with Integers(线段树+区间更新+区间求和)

    题目链接:id=3468http://">http://poj.org/problem? id=3468 A Simple Problem with Integers Time Lim ...

  6. Wscript对象具体解释

    15.6  Windows脚本宿主的内建对象 每一个编程环境都提供了自己的对象模型,开发者 能够使用这些对象模型实现各种解决方式,WSH也不例外.WSH包括了一组核心对象,分别包括了属性和方法,能够用 ...

  7. 用MJExtension简化MVC

    首先引入MJExtension框架 模型 #import <Foundation/Foundation.h> @interface FundsModel : NSObject /** * ...

  8. Codeforces Round #276 (Div. 1)B. Maximum Value 筛法

    D. Maximum Value     You are given a sequence a consisting of n integers. Find the maximum possible ...

  9. C# 验证数字的正则表达式集

    验证数字的正则表达式集 博客分类: 正则 正则表达式 验证数字的正则表达式集 验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d ...

  10. B1821 [JSOI2010]Group 部落划分 Group 二分答案&&并查集

    这个题正解是最小生成树,但是...最大值最小?一看就是二分答案啊!不用多想,直接二分答案加暴力验证就行了. 题干: Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒 ...