zoukankan      html  css  js  c++  java
  • [开发笔记]-获取天气数据接口

         之前做的一个小程序需要获取天气预报接口,使用的是中国天气网的免费接口:

    http://m.weather.com.cn/data/101010100.html ,但最近发现这个接口的天气数据不更新了,最新的天气是2014年2月19日的。推测可能是加了什么限制,目前网上搜到的大部分天气接口都是这个。

          下面的两个天气接口倒是仍然可以使用,不过一个是获取实时天气情况的,一个是获取当天整体天气情况的。对于需要获取7天内的天气情况,还需要找寻其他接口来实现。

    http://www.weather.com.cn/data/sk/101010100.html

    http://www.weather.com.cn/data/cityinfo/101010100.html

           通过这几天的测试,终于找到了一个可用的,特提供给大家。

    接口获取的就是中天气网的手机版页面中的数据,网址为: 首页-中国天气网 http://mobile.weather.com.cn/index.html。

           数据是通过webclient,get方式来抓取的。这里需要指出一个需要注意的地方。

    就是在webClient添加的请求头信息中加入Referer信息,否则获取的天气数据不是当天的。

    获取的的数据为:

    如果不加Referer头信息,获取到的数据为:

    无论你什么时候获取,获取到的都是20131012这天的天气数据。奇怪的是time是最新的,一直在更新的。由此也可以看出来,他们是加了某种过滤机制无法获取真实的当天天气,这也间接解释了为什么上面提到的那个天气接口不能使用了。

    说到这里那就再加一句,开头提到的天气接口 http://m.weather.com.cn/data/101010100.html 即使我加了Referer信息也不能获取当天的。

    数据抓取代码:

    class Program
        {
            //参考文章:中国天气网的数据接口研究 - Create Chen - 博客园 http://www.cnblogs.com/technology/p/3488176.html
    
    
            static void Main(string[] args)
            {
                //实时天气
               // string url = "http://mobile.weather.com.cn/data/sk/101010100.html?_=1393644135884";
              //穿衣指数
                string url = "http://mobile.weather.com.cn/data/zsM/101010100.html?_=1393645156001";
    
    
                string html = webGetHtml(url);
                Console.WriteLine(html);
                Console.ReadKey();
            }
    
    
            //get请求
    
            public static string webGetHtml(string url)
            {
               // string url = "http://www.cnblogs.com/";
                // http://www.cnblogs.com/babycool 
                WebClient client = new WebClient();
                //设置发出请求 的URI
                client.BaseAddress = url;
    
                //添加到请求头部的信息
                //GET / HTTP/1.1
                //Accept: text/html, application/xhtml+xml, */*
                //Accept-Language: zh-CN
                //User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; qdesk 2.4.1263.203; Windows NT 6.1; Trident/5.0)
                //Accept-Encoding: gzip, deflate
                //Host: 
                //Connection: Keep-Alive
    
                client.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01");
                client.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
                //注意:Referer 一定要加,否则获取的不是当天的。
                client.Headers.Add("Referer", "http://mobile.weather.com.cn/");
                client.Headers.Add("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1;Chrome/27.0.1453.110; Trident/5.0)");
    
                //client.Headers.Add("Connection", "Keep-Alive");
                //client.Headers.Add("Accept-Encoding", "gzip, deflate");
    
                //如果是获取网站的首页的内容 则为 client.OpenRead("/");
                //如果是获取网站域名下的非首页的内容 则为client.OpenRead(url);
    
                //获取流数据
                Stream webStream = client.OpenRead(url);
    
                StreamReader reader = new StreamReader(webStream, Encoding.UTF8);
                //获取html代码
                // string html = reader.ReadToEnd();
    
                return reader.ReadToEnd();
            }
        }

    转载请注明出处。

  • 相关阅读:
    设计模式 23
    生活杂谈
    设计模式经典书籍
    ABP 样板开发框架系列
    关键字
    vs 2015
    优秀文章推荐
    Parallel 并行编程
    CSRF
    sql性能优化
  • 原文地址:https://www.cnblogs.com/babycool/p/3575167.html
Copyright © 2011-2022 走看看