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文件,序列化成對象,如果沒有接觸過這類知識,可以看下《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#程序設計有所幫助。

