这篇文章运用简单易懂的例子给大家介绍C#调用API生成RSS资源文件的方法,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
创新互联-专业网站定制、快速模板网站建设、高性价比衡山网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式衡山网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖衡山地区。费用合理售后完善,十载实体公司更值得信赖。
RSS就是简易信息聚合(也叫聚合内容),是一种RSS基于XML标准,在互联网上被广泛采用的内容包装和投递协议。RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用。RSS搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者。发布一个RSS文件后,这个RSS Feed中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的XML格式,所以也能在其他的终端和服务中使用,是一种描述和同步网站内容的格式。
1.新浪微博RSS订阅第三方网站
新浪微博本身没有提供RSS订阅,但是到网上搜索,发现了一个第三方的网站,提供新浪微博的RSS资源,所以,本文的RSS订阅说白了都是基于这个第三方网站的。
log.medcl.net/item/2010/02/sina-bo-rss-subscribe-feed-generate-micro/
2.网上通用的OPML文件的XML格式
下面是从Google Reader中导出的opml文件,这是网络RSS阅读器甚至所有RSS阅读器的标准格式吧,至少“鲜果”,“有道”这些比较流行的在线阅读器都支持这个格式的文件导入。
|
分析OPML文件的架构,然后方便通过程序来将它需要的信息写成此架构的文件,便于阅读器引用。 OPML文件由头部标签
(主要是本文件的一些注释,不影响实际的RSS订阅信息,不是太重要)和(RSS阅读器提取订阅资源的全部数据来源)。在节点下面有个一级的3.新浪微博API――从服务器上导出用户好友数据到本地XML文件
下面是自己整理的代码,从服务器上请求用户的好友信息:
private void getFriends() { int previous_cursor=-1; int next_cursor = -1; while (next_cursor != 0) { string cursor = Convert.ToString(previous_cursor); string url = " http://api.t.sina.com.cn/statuses/friends.xml?source=AppKey&cursor=" + cursor; string username = "dreamzsm@gmail.com"; string password = name; //这里输入你自己微博登录的的密码 //注意这里的格式哦,为 "username:password" System.Net.WebRequest webRequest = System.Net.WebRequest.Create(url); System.Net.HttpWebRequest myReq = webRequest as System.Net.HttpWebRequest; //身份验证 string usernamePassword = username + ":" + password; CredentialCache mycache = new CredentialCache(); mycache.Add(new Uri(url), "Basic", new NetworkCredential(username, password)); myReq.Credentials = mycache; myReq.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword))); WebResponse wr = myReq.GetResponse(); Stream receiveStream = wr.GetResponseStream(); StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8); string content = reader.ReadToEnd(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(content); // xmlDoc.Load("data1.xml"); XmlNodeList nodeList = xmlDoc.SelectSingleNode("users").ChildNodes;//获取根节点的所有子节点 next_cursor = Convert.ToInt16(nodeList.Item(nodeList.Count - 2).InnerText); previous_cursor = Convert.ToInt16(nodeList.Item(nodeList.Count-1).InnerText); string xmlName = "friends_" + nodeList.Item(nodeList.Count - 1).InnerText + "_" + Convert.ToInt16(nodeList.Item(nodeList.Count - 2).InnerText) + ".xml"; previous_cursor = next_cursor; xmlDoc.Save(xmlName); } } |
为了程序设计简单一点,笔者就有点偷懒了,没有仔细研究如何将所有的数据写到一个XML文件中,而是每次请求得到的20条数据写成一个XML文件,最后我159个好友,按照指定的命名方法生成了8个XML文件。
如此,就得到了所有的你的好友(就是你跟随的人)的信息了,以单人为例,其主要信息如下:
|
可以看到这里面的信息量是超级多的,我简单介绍下几个主要的节点吧
id | 用户新浪微博的数字ID,就像你的QQ号一样 |
name | 用户昵称 |
province | 省代号 |
city | 市代号 |
location | 所在省市(好像和上面两个节点重复了) |
description | 自我描述 |
domain | 域名,就是除了数字ID后,用户申请的修改域名 |
gender | 性别。男的是Male,女的是Female. |
followers_count | 粉丝数 |
friends_count | 跟随的人数 |
statuses_count | 发表的状态也就是微博数 |
favourites_count | 收藏微博数目吧?(不知道这个有什么用) |
created_at | 用户创建此微博客的时间 |
verified | 是否经过新浪的VIP认证 |
status | 用户最近的一次状态 |
除了user信息外,还有一些其它信息,比如根节点下的next_cursor和previous_cousor,这方便用户分多次到服务器上请求数据时可以此作为定位依据。
4.将XML文件存储到ACCESS数据库中进行备份
如果不想备份的可以直接从第3步中到第5步,但是笔者,觉得将数据转换成此构架后,更加方便后来的程序操作以及浏览数据。
关于XML的详细方法参考:小气的鬼
《在C#.net中如何操作XML》
www.cnblogs.com/weekzero/archive/2005/06/21/178140.html
下面开始读取刚才从新浪微博服务器上请求得到的XML文件了。然后转换成ACCESS数据库内容。(当然你要先用ACCESS在指定目录下建立一个*.mdb文件用来存储数据)
下面是对单个XML文件进行读取,并插入到数据库中(这段代码是在ASP.NET中写的)
public void readTsinaFriends(string fileName) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Server.MapPath(fileName)); XmlNodeList nodeList = xmlDoc.SelectSingleNode("users").ChildNodes;//获取 根节点的所有子节点 ; //删除不用的一级节点,比如提示人数的所在位置的标记 XmlNode root = xmlDoc.SelectSingleNode("users"); // XmlNodeList xnl = xmlDoc.SelectSingleNode("Employees").ChildNodes; for (int k = 0; k < nodeList.Count; k++) { XmlElement xe = (XmlElement)nodeList.Item(k); if(xe.Name=="user") {//去掉XML文件中不需要的节点:next_cursor,previous_coursor以及user节点中的status,方便XML直接转换成DataTable XmlNodeList nodeList1 = xmlDoc.SelectNodes("users/user");//得到所有的标签user一级节点 foreach (XmlNode xmlNodeTemp in nodeList1) { if (xmlNodeTemp.LastChild.Name == "status")//移除每个user节点中的"status"子节点--(一般情况下此节点都放在最后一个,所以就不遍历了,直接地址定位) { xmlNodeTemp.RemoveChild(xmlNodeTemp.LastChild); } } } else if (xe.Name == "next_cursor" || xe.Name == "previous_cursor") { root.RemoveChild(xe); if (k < nodeList.Count) k = k - 1; } } string tbxml = xmlDoc.OuterXml; DataTable dt = new DataTable(); DataSet ds = new DataSet(); System.IO.StringReader reader = new System.IO.StringReader(tbxml); ds.ReadXml(reader); dt = ds.Tables[0];//如果XML文本中有同名的父子节点,那么此语句就会多读出一条数据,这可能是此API函数的局限性吧 DataTable dtCopy = dt.Copy(); //dtCopy.Columns.Remove("url"); //dtCopy.Columns.Remove("profile_image_url"); dtCopy.Columns.Remove("description"); //这个字段里面字符编码不太规则,在插入ACCESS的时候总有问题,而且用处不大,所以就去除了。(又偷懒了呃) DataRow drTemp = dtCopy.NewRow(); string strInsert = string.Empty; OleDbConnection aConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\coursware\\网络软文\\API_微波\\weibo.mdb"); aConnection.Open(); for (int i = 0; i < dtCopy.Rows.Count - 1; i++) { drTemp = dtCopy.Rows[i]; strInsert = "'"+drTemp[0].ToString()+"','"; for (int j = 1; j < dtCopy.Columns.Count - 1; j++) { strInsert += (drTemp[j].ToString() + "','"); } strInsert += drTemp[dtCopy.Columns.Count - 1].ToString() + "'"; string strCmd = "INSERT INTO Friends VALUES(" + strInsert + ")"; OleDbCommand command = new OleDbCommand(strCmd, aConnection); command.ExecuteNonQuery(); } aConnection.Close(); } |
对多个XML文件进行遍历,一个个导入到ACCESS数据库中:
/// |
经过上面的操作后,你再打开你的ACCESS数据库文件weibo.mdb文件中对应的表,就可以看到所以的信息都已经导入到ACCESS中了。如下图所示:
5.对ACCESS数据库查询并写成RSS阅读器的OPML格式
对于制作RSS阅读器的OPML格式,需要的数据只有两条字段:一个是id字段,一个是name字段。
这个过程实际上就是对数据进行XML编码的过程,啥都不说了,一切都在代码中了(也是在ASP.NET工程中写的):
/// |
最后在指定的目录下,程序就自动生成了一个RssReader.xml的文件了。大功告成了!
然后将此文件就可以导入到任何一个RSS阅读器中了,用户就能够通过RSS阅读器来获取微博信息了,而且现在的RSS阅读器都有个一键转贴到微博的功能,很方便的,不想转到自己微博的,也可以通过RSS阅读器直接收藏到阅读器中。辛苦了两天,今天能有这么一点小成果,还是觉得很不错的,呵呵,也祝大家也能好运。本次代码比较还需要各种完善,比如,如何将所以的数据写成一个XML文件,这个笔者就暂时不做了,留给大家去做吧。
Rss阅读器效果图如下:
关于C#调用API生成RSS资源文件的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
网页题目:C#调用API生成RSS资源文件的方法
文章位置:http://lswzjz.com/article/ghijcd.html