C#实现解析百度天气数据,Rss解析百度新闻以及根据IP获取所在城市的方法
本文实例讲述了c#实现解析百度天气数据,rss解析百度新闻以及根据ip获取所在城市的方法,分享给大家供大家参考。具体实现方法如下:
一、百度天气
接口地址:http://api.map.baidu.com/telematics/v3/weather?location=上海&output=json&ak=hxwagbscc9utkbo5v5qg1wz9,其中ak是密钥,自行去申请即可,便于大家测试,楼主就公布并了自己的key,这样可以直接获取到数据。
获取到的数据是这样的:
根据返回的json定义出相应的数据结构:
{
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,是机器连接外网才会有,所以楼主写了一个页面,部署在外网服务器。
相关代码如下:
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文件,序列化成对象,如果没有接触过这类知识,可以看下。
根据它的源,就能轻松定义出数据结构。
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>
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#程序设计有所帮助。