真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C#調(diào)用API生成RSS資源文件的方法

這篇文章運用簡單易懂的例子給大家介紹C#調(diào)用API生成RSS資源文件的方法,代碼非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比衡山網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式衡山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋衡山地區(qū)。費用合理售后完善,十載實體公司更值得信賴。

RSS就是簡易信息聚合(也叫聚合內(nèi)容),是一種RSS基于XML標準,在互聯(lián)網(wǎng)上被廣泛采用的內(nèi)容包裝和投遞協(xié)議。RSS(Really Simple Syndication)是一種描述和同步網(wǎng)站內(nèi)容的格式,是使用最廣泛的XML應(yīng)用。RSS搭建了信息迅速傳播的一個技術(shù)平臺,使得每個人都成為潛在的信息提供者。發(fā)布一個RSS文件后,這個RSS Feed中包含的信息就能直接被其他站點調(diào)用,而且由于這些數(shù)據(jù)都是標準的XML格式,所以也能在其他的終端和服務(wù)中使用,是一種描述和同步網(wǎng)站內(nèi)容的格式。

1.新浪微博RSS訂閱第三方網(wǎng)站

新浪微博本身沒有提供RSS訂閱,但是到網(wǎng)上搜索,發(fā)現(xiàn)了一個第三方的網(wǎng)站,提供新浪微博的RSS資源,所以,本文的RSS訂閱說白了都是基于這個第三方網(wǎng)站的。

log.medcl.net/item/2010/02/sina-bo-rss-subscribe-feed-generate-micro/

2.網(wǎng)上通用的OPML文件的XML格式

下面是從Google Reader中導(dǎo)出的opml文件,這是網(wǎng)絡(luò)RSS閱讀器甚至所有RSS閱讀器的標準格式吧,至少“鮮果”,“有道”這些比較流行的在線閱讀器都支持這個格式的文件導(dǎo)入。


	
		subscriptions
		2010-05-16 15:45:03
		
	
	
					
			
			
						
						
		
					
						
			
		
	

分析OPML文件的架構(gòu),然后方便通過程序來將它需要的信息寫成此架構(gòu)的文件,便于閱讀器引用。 OPML文件由頭部標簽(主要是本文件的一些注釋,不影響實際的RSS訂閱信息,不是太重要)和(RSS閱讀器提取訂閱資源的全部數(shù)據(jù)來源)。在節(jié)點下面有個一級的節(jié)點,這個節(jié)點對應(yīng)RSS閱讀器中地RSS資源的分類文件夾相關(guān)信息(顯然text表示的就是文件夾名稱),然后一級下面就是二級的標簽對,這里面就是RSS資源的相關(guān)數(shù)據(jù)內(nèi)容了。二級中的節(jié)點的一些重要屬性:text表示資源的標題,htmlUrl表示的是信息的的Web網(wǎng)頁地址,xmlUrl表示的是信息的RSS訂閱地址。

3.新浪微博API――從服務(wù)器上導(dǎo)出用戶好友數(shù)據(jù)到本地XML文件

下面是自己整理的代碼,從服務(wù)器上請求用戶的好友信息:

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;//獲取根節(jié)點的所有子節(jié)點

                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);

            }
        }


C#調(diào)用API生成RSS資源文件的方法為了程序設(shè)計簡單一點,筆者就有點偷懶了,沒有仔細研究如何將所有的數(shù)據(jù)寫到一個XML文件中,而是每次請求得到的20條數(shù)據(jù)寫成一個XML文件,最后我159個好友,按照指定的命名方法生成了8個XML文件。

如此,就得到了所有的你的好友(就是你跟隨的人)的信息了,以單人為例,其主要信息如下:


    1710993410
    某丫大人
    某丫大人
    43
    1
    湖南 長沙
    飯否兒,心朝飯否,春暖花開。 我還是@餓YA 我還真是懶得介紹了。
    http://1
    http://tp3.sinaimg.cn/1710993410/50/1273755892
    
    
    f
    168
    79
    846
    0
    Sun Mar 14 00:00:00 +0800 2010
    false
    false
    false
    false
    
      Sun May 16 21:02:44 +0800 2010
      364379114
      煩死了快、
      
        新浪微博
      
      false
      false
      
      
      
      
      
      
      
    
  

可以看到這里面的信息量是超級多的,我簡單介紹下幾個主要的節(jié)點吧

id

用戶新浪微博的數(shù)字ID,就像你的QQ號一樣

name

用戶昵稱

province

省代號

city

市代號

location

所在省市(好像和上面兩個節(jié)點重復(fù)了)

description

自我描述

domain

域名,就是除了數(shù)字ID后,用戶申請的修改域名

gender

性別。男的是Male,女的是Female.

followers_count

粉絲數(shù)

friends_count

跟隨的人數(shù)

statuses_count

發(fā)表的狀態(tài)也就是微博數(shù)

favourites_count

收藏微博數(shù)目吧?(不知道這個有什么用)

created_at

用戶創(chuàng)建此微博客的時間

verified

是否經(jīng)過新浪的VIP認證

status

用戶最近的一次狀態(tài)

除了user信息外,還有一些其它信息,比如根節(jié)點下的next_cursor和previous_cousor,這方便用戶分多次到服務(wù)器上請求數(shù)據(jù)時可以此作為定位依據(jù)。

20

0

4.將XML文件存儲到ACCESS數(shù)據(jù)庫中進行備份

如果不想備份的可以直接從第3步中到第5步,但是筆者,覺得將數(shù)據(jù)轉(zhuǎn)換成此構(gòu)架后,更加方便后來的程序操作以及瀏覽數(shù)據(jù)。

關(guān)于XML的詳細方法參考:小氣的鬼

《在C#.net中如何操作XML》

www.cnblogs.com/weekzero/archive/2005/06/21/178140.html

下面開始讀取剛才從新浪微博服務(wù)器上請求得到的XML文件了。然后轉(zhuǎn)換成ACCESS數(shù)據(jù)庫內(nèi)容。(當然你要先用ACCESS在指定目錄下建立一個*.mdb文件用來存儲數(shù)據(jù))

下面是對單個XML文件進行讀取,并插入到數(shù)據(jù)庫中(這段代碼是在ASP.NET中寫的)

 public void readTsinaFriends(string fileName)
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(Server.MapPath(fileName));  

       XmlNodeList nodeList = xmlDoc.SelectSingleNode("users").ChildNodes;//獲取 根節(jié)點的所有子節(jié)點
       ;        //刪除不用的一級節(jié)點,比如提示人數(shù)的所在位置的標記
       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文件中不需要的節(jié)點:next_cursor,previous_coursor以及user節(jié)點中的status,方便XML直接轉(zhuǎn)換成DataTable
                XmlNodeList nodeList1 = xmlDoc.SelectNodes("users/user");//得到所有的標簽user一級節(jié)點

                foreach (XmlNode xmlNodeTemp in nodeList1)
                {                    if (xmlNodeTemp.LastChild.Name == "status")//移除每個user節(jié)點中的"status"子節(jié)點--(一般情況下此節(jié)點都放在最后一個,所以就不遍歷了,直接地址定位)
                    {
                        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文本中有同名的父子節(jié)點,那么此語句就會多讀出一條數(shù)據(jù),這可能是此API函數(shù)的局限性吧

        DataTable dtCopy = dt.Copy();        //dtCopy.Columns.Remove("url");
        //dtCopy.Columns.Remove("profile_image_url");
        dtCopy.Columns.Remove("description"); //這個字段里面字符編碼不太規(guī)則,在插入ACCESS的時候總有問題,而且用處不大,所以就去除了。(又偷懶了呃)


        DataRow drTemp = dtCopy.NewRow();        string strInsert = string.Empty;

        OleDbConnection aConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\coursware\\網(wǎng)絡(luò)軟文\\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文件進行遍歷,一個個導(dǎo)入到ACCESS數(shù)據(jù)庫中:

 /// 
    /// 將所有好友都導(dǎo)出了,然后存儲在ACCESS數(shù)據(jù)庫中了。
    /// 
    public void readAllXml()
    {        for (int i = 0; i < 8; i++)
        {            string fileName = "friends_" + Convert.ToString(i * 20) + "_" + Convert.ToString(i*20+20)+".xml";//按照存儲XML文件時的命名規(guī)則進行讀取
            readTsinaFriends(fileName);
        }
    }

經(jīng)過上面的操作后,你再打開你的ACCESS數(shù)據(jù)庫文件weibo.mdb文件中對應(yīng)的表,就可以看到所以的信息都已經(jīng)導(dǎo)入到ACCESS中了。如下圖所示:

C#調(diào)用API生成RSS資源文件的方法

5.對ACCESS數(shù)據(jù)庫查詢并寫成RSS閱讀器的OPML格式

對于制作RSS閱讀器的OPML格式,需要的數(shù)據(jù)只有兩條字段:一個是id字段,一個是name字段。

這個過程實際上就是對數(shù)據(jù)進行XML編碼的過程,啥都不說了,一切都在代碼中了(也是在ASP.NET工程中寫的):

/// 
    /// 建立新浪微博的RSS文件
    /// 
    public void CreateTsinaRssXmlFile()
    {

        OleDbConnection aConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\coursware\\網(wǎng)絡(luò)軟文\\API_微波\\weibo.mdb");        string strCmd = "select id as idnum,screen_name as name from Friends";        //從ACCESS中獲取數(shù)據(jù)
        aConnection.Open();
        OleDbDataAdapter da = new OleDbDataAdapter(strCmd, aConnection);
        DataSet ds = new DataSet();
        da.Fill(ds, "TSina");
        ds.DataSetName = "RssReader";
        DataTable dt = ds.Tables[0];//數(shù)據(jù)集的第0張表格


        XmlDocument xmldoc;

        XmlElement xmlelem;

        xmldoc = new XmlDocument();        //加入XML的聲明段落
        XmlDeclaration xmldecl;
        xmldecl = xmldoc.CreateXmlDeclaration("1.0", "UTF-8", null);
        xmldoc.AppendChild(xmldecl);        //加入一個根元素
        xmlelem = xmldoc.CreateElement(" ", "opml", " ");
        xmldoc.AppendChild(xmlelem);

        XmlNode root = xmldoc.SelectSingleNode("opml");//查找 節(jié)點


        XmlElement xeHead = xmldoc.CreateElement("head");//創(chuàng)建一個節(jié)點 
        //為head節(jié)點增加子節(jié)點
        XmlElement xeHeadsub = xmldoc.CreateElement("title");
        xeHeadsub.InnerText = "Rss Reader";//設(shè)置節(jié)點文本 
        xeHead.AppendChild(xeHeadsub);//添加到子節(jié)點中 
        root.AppendChild(xeHead);//添加到節(jié)點中 


        //增加body子節(jié)點,然后,將所有的RSS訂閱信息全部寫入到body節(jié)點中間
        XmlElement xeBody = xmldoc.CreateElement("body");
        root.AppendChild(xeBody);        //第一層循環(huán)是標簽(文件夾循環(huán))由于本次只做一個標簽,所以就只循環(huán)一次了

        //RSS的文件夾屬性節(jié)點
        XmlElement xe1 = xmldoc.CreateElement("outline");
        xe1.SetAttribute("text", "Tsina");//設(shè)置該節(jié)點title屬性
        xe1.SetAttribute("title", "Tsina");//設(shè)置該節(jié)點title屬性 --第一層的outline節(jié)點的屬性表示的是RSS的標簽或者說是文件夾


        //下面就要開始為此文件夾節(jié)點添加下屬子節(jié)點,也就是添加一些實質(zhì)的RSS地址了
        string strTitle = string.Empty;        string strText = string.Empty;        string strXmlUrl = string.Empty;        string strHtmlUrl = string.Empty;        for (int i = 0; i < dt.Rows.Count; i++)
        {
            strTitle = dt.Rows[i]["NAME"].ToString().Trim();
            strText = strTitle;
            strXmlUrl = "http://medcl.net/SinaRss.aspx?uid=" + dt.Rows[i]["IDNum"].ToString().Trim();
            strHtmlUrl = "http://t.sina.com.cn/" + dt.Rows[i]["IDNum"].ToString().Trim();

            XmlElement xesub1 = xmldoc.CreateElement("outline");
            xesub1.SetAttribute("text", strText);//設(shè)置該節(jié)點title屬性
            xesub1.SetAttribute("title", strTitle);//設(shè)置該節(jié)點title屬性 --第一層的outline節(jié)點的屬性表示的是RSS的標簽或者說是文件夾
            xesub1.SetAttribute("type", "rss");
            xesub1.SetAttribute("xmlUrl", strXmlUrl);

            xesub1.SetAttribute("htmlUrl", strHtmlUrl);
            xe1.AppendChild(xesub1);//添加到節(jié)點中 
        }
        xeBody.AppendChild(xe1);        //保存創(chuàng)建好的XML文檔
        xmldoc.Save(Server.MapPath("RssReader.xml"));

    }

最后在指定的目錄下,程序就自動生成了一個RssReader.xml的文件了。大功告成了!

C#調(diào)用API生成RSS資源文件的方法

然后將此文件就可以導(dǎo)入到任何一個RSS閱讀器中了,用戶就能夠通過RSS閱讀器來獲取微博信息了,而且現(xiàn)在的RSS閱讀器都有個一鍵轉(zhuǎn)貼到微博的功能,很方便的,不想轉(zhuǎn)到自己微博的,也可以通過RSS閱讀器直接收藏到閱讀器中。辛苦了兩天,今天能有這么一點小成果,還是覺得很不錯的,呵呵,也祝大家也能好運。本次代碼比較還需要各種完善,比如,如何將所以的數(shù)據(jù)寫成一個XML文件,這個筆者就暫時不做了,留給大家去做吧。

Rss閱讀器效果圖如下:

C#調(diào)用API生成RSS資源文件的方法

關(guān)于C#調(diào)用API生成RSS資源文件的方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


標題名稱:C#調(diào)用API生成RSS資源文件的方法
網(wǎng)站鏈接:http://weahome.cn/article/ghijcd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部