C#实现解析百度天气数据,Rss解析百度新闻以及根据IP获取所在城市的方法

 更新时间:2014年10月27日 11:34:48   转载 投稿:shichen2014  
这篇文章主要介绍了C#实现解析百度天气数据,Rss解析百度新闻以及根据IP获取所在城市的方法,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了C#实现解析百度天气数据,Rss解析百度新闻以及根据IP获取所在城市的方法,分享给大家供大家参考。具体实现方法如下:

一、百度天气

接口地址:http://api.map.baidu.com/telematics/v3/weather?location=上海&output=json&ak=hXWAgbsCC9UTkBO5V5Qg1WZ9,其中ak是密钥,自行去申请即可,便于大家测试,楼主就公布并了自己的Key,这样可以直接获取到数据。

获取到的数据是这样的:

复制代码 代码如下:
{"error":0,"status":"success","date":"2014-10-27","results":[{"currentCity":"上海","pm25":"95","index":[{"title":"穿衣","zs":"较舒适","tipt":"穿衣指数","des":"建议着薄外套、开衫牛仔衫裤等服装。年老体弱者应适当添加衣物,宜着夹克衫、薄毛衣等。"},{"title":"洗车","zs":"较适宜","tipt":"洗车指数","des":"较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。"},{"title":"旅游","zs":"适宜","tipt":"旅游指数","des":"天气较好,温度适宜,但风稍微有点大。这样的天气适宜旅游,您可以尽情地享受大自然的无限风光。"},{"title":"感冒","zs":"较易发","tipt":"感冒指数","des":"天气较凉,较易发生感冒,请适当增加衣服。体质较弱的朋友尤其应该注意防护。"},{"title":"运动","zs":"较适宜","tipt":"运动指数","des":"天气较好,但风力较大,推荐您进行室内运动,若在户外运动请注意防风。"},{"title":"紫外线强度","zs":"弱","tipt":"紫外线强度指数","des":"紫外线强度较弱,建议出门前涂擦SPF在12-15之间、PA+的防晒护肤品。"}],"weather_data":[{"date":"周一 10月27日 (实时:19℃)","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/duoyun.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/duoyun.png","weather":"多云","wind":"东北风3-4级","temperature":"21 ~ 16℃"},{"date":"周二","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/duoyun.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/yin.png","weather":"多云转阴","wind":"东风微风","temperature":"21 ~ 17℃"},{"date":"周三","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/xiaoyu.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/xiaoyu.png","weather":"小雨","wind":"东风微风","temperature":"21 ~ 19℃"},{"date":"周四","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/xiaoyu.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/xiaoyu.png","weather":"小雨","wind":"东南风微风","temperature":"23 ~ 20℃"}]}]}

根据返回的Json定义出相应的数据结构:

复制代码 代码如下:
public class BaiduTQ
{
        public int error { get; set; }
        public string status { get; set; }
        public string date { get; set; }
        public List<BaiduResult> results { get; set; }
}

public class BaiduResult
{
        public string currentCity { get; set; }
        public string pm25 { get; set; }
        public List<BaiduIndex> index { get; set; }
        public List<BaiDuWeaterData> weather_data { get; set; }
}

public class BaiduIndex
{
        public string title { get; set; }
        public string zs { get; set; }
        public string tipt { get; set; }
        public string des { get; set; }
}

public class BaiDuWeaterData
{
        public string date { get; set; }
        public string dayPictureUrl { get; set; }
        public string nightPictureUrl { get; set; }
        public string weather { get; set; }
        public string wind { get; set; }
        public string temperature { get; set; }
}

然后直接通过Newtonsoft.Json 反序列化成即可。

既然是获取天气,肯定是希望获取客户所在城市的天气,下一步则是需要根据用户机器IP获取所在城市,然后获取该城市的天气信息。

二、IP获取城市

通过淘宝的IP库,http://ip.taobao.com/,即可查询指定IP所在的城市、国家、运营商等。

有了上面的途径,我们下一步的工作就是获取客户的外网IP,而外网IP,是机器连接外网才会有,所以楼主写了一个页面,部署在外网服务器。

相关代码如下:

复制代码 代码如下:
var ip = Request.UserHostAddress;
using (var client = new WebClient())
{
 var url = "http://ip.taobao.com/service/getIpInfo.php?ip=" + ip;
 client.Encoding = Encoding.UTF8;
 var str = client.DownloadString(url);
 Response.Write(str);
}

这样我们就可以获取到客户所在城市的天气数据了。

三、获取百度新闻

最近还有个小需求,获取某某新闻数据,楼主习惯性的查了下百度的相关资料,能通过Rss来获取百度新闻数据。

接口地址:http://news.baidu.com/n?cmd=7&loc=0&name=%B1%B1%BE%A9&tn=rss

打开后,查看它的源,无非就是xml文件,我们可以将xml文件,序列化成对象,如果没有接触过这类知识,可以看下《xml与对象的序列化和反序列化》

根据它的源,就能轻松定义出数据结构。

复制代码 代码如下:
[XmlRoot("rss")]
public class Rss
{
        public Channel channel { get; set; }
}
[XmlRoot("channel")]
public class Channel
{
        public string title { get; set; }
        public BaiduImage image { get; set; }
        public string link { get; set; }
        public string description { get; set; }
        public string language { get; set; }
        public string lastBuildDate { get; set; }
        public string docs { get; set; }
        public string generator { get; set; }
        [XmlElement]
        public List<Channel_Item> item { get; set; }
}

public class BaiduImage
{
        public string title { get; set; }
        public string link { get; set; }
        public string url { get; set; }
}

public class Channel_Item
{
        public string title { get; set; }
        public string link { get; set; }
        public string pubDate { get; set; }
        public string guid { get; set; }
        public string source { get; set; }
        public string author { get; set; }
        public string description { get; set; }
}

序列化的方法很简单。

复制代码 代码如下:
/// <summary>
/// 反序列化
/// </summary>
public static T Deserialize<T>(string xmlContent)
{
    XmlSerializer xs = new XmlSerializer(typeof(T));
    using (StringReader strReader = new StringReader(xmlContent))
    {
 XmlReader xmlReader = XmlReader.Create(strReader);
 return (T)xs.Deserialize(xmlReader);
    }
}

完整实例代码点击此处本站下载

希望本文所述对大家的C#程序设计有所帮助。

相关文章

  • WinForm实现仿视频播放器左下角滚动新闻效果的方法

    WinForm实现仿视频播放器左下角滚动新闻效果的方法

    这篇文章主要介绍了WinForm实现仿视频播放器左下角滚动新闻效果的方法,涉及WinForm窗口滚动字幕设置的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • C#实现程序开机启动的方法

    C#实现程序开机启动的方法

    这篇文章主要介绍了C#实现程序开机启动的方法,涉及C#针对应用程序及注册表的相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • C#递归算法之打靶算法分析

    C#递归算法之打靶算法分析

    这篇文章是对打靶算法分析,比较简单,但逻辑一定要清楚,分析问题的方法一定要准确,有需要的朋友可以参考一下。
    2016-06-06
  • C#使用GDI绘制矩形的方法

    C#使用GDI绘制矩形的方法

    这篇文章主要介绍了C#使用GDI绘制矩形的方法,涉及C#使用GDI绘图的相关技巧,需要的朋友可以参考下
    2015-04-04
  • c#中Winform实现多线程异步更新UI(进度及状态信息)

    c#中Winform实现多线程异步更新UI(进度及状态信息)

    本篇文章主要介绍了c#中Winform实现多线程异步更新UI(进度及状态信息) ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • C#开发可播放摄像头及任意格式视频的播放器

    C#开发可播放摄像头及任意格式视频的播放器

    这篇文章主要介绍了C#开发可播放摄像头及任意格式视频的播放器 ,在WPF中,借助Vlc.DotNet调用VLC类库,实现视频播功能。需要的朋友可以参考下
    2019-08-08
  • C#开发纽曼USB来电小秘书客户端总结

    C#开发纽曼USB来电小秘书客户端总结

    这篇文章主要介绍了C#开发纽曼USB来电小秘书客户端总结,对于C#项目开发来说有一定的参考借鉴价值,需要的朋友可以参考下
    2014-08-08
  • C#中Cookie之存储对象

    C#中Cookie之存储对象

    这篇文章主要介绍了在项目中,需要将用户的信息存到Cookie中,但是cookie只能保存字符串,所以需要先序列号,然后在存储在cookie中,有需要的朋友可以借鉴下
    2015-07-07
  • C#写入对象或集合类型数据到xml文件的方法

    C#写入对象或集合类型数据到xml文件的方法

    这篇文章主要介绍了C#写入对象或集合类型数据到xml文件的方法,涉及C#针对XML文件的相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C#同步、异步远程下载文件实例

    C#同步、异步远程下载文件实例

    使用C#下载一个Internet上的文件主要是依靠HttpWebRequest/HttpWebResonse和WebClient。具体处理起来还有同步和异步两种方式,所以我们其实有四种组合
    2014-04-04

最新评论