免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
改進(jìn) RSS Bandit 應(yīng)用程序
在上一篇文章中,我描述了 RSS Bandit 應(yīng)用程序的內(nèi)部工作原理,該應(yīng)用程序通過處理 Web 上的 RSS 提要來收集各種 Web 站點(diǎn)上的信息。正如我在上一篇文章中提到的那樣,RSS 是一種 XML 格式,用于組合來自聯(lián)機(jī)新聞源的新聞和類似內(nèi)容。
RSS 提要是一個(gè)定期更新的 XML 文檔,其中包含有關(guān)新聞源和其中內(nèi)容的元數(shù)據(jù)。一個(gè) RSS 提要至少應(yīng)包含一個(gè)代表新聞源的 channel,channel 包含一個(gè)標(biāo)題、鏈接和描述新聞源的說明。此外,一個(gè) RSS 提要通常會(huì)包含一個(gè)或多個(gè)代表單個(gè)新聞項(xiàng)的 item 元素,其中每個(gè)元素都應(yīng)包含一個(gè)標(biāo)題、鏈接或說明。
自撰寫上一篇文章以來,RSS 已被更廣泛地用作 Web 上散布新聞的機(jī)制。RSS 提要不僅由聯(lián)機(jī)新聞源(如Yahoo!News、BBCRolling Stone magazine)使用,而且已經(jīng)在以開發(fā)人員為中心的信息源(如Microsoft Developer Network (MSDN)、Oracle Technology Network (OTN)Sun Developer Network)之間變得很流行。隨著 RSS 提要的迅速增加,桌面新聞集合器已經(jīng)成為一個(gè)功能強(qiáng)大的工具,讓那些有興趣及時(shí)了解各種新聞源信息的人不必瀏覽多個(gè) Web 站點(diǎn)來獲取固定的信息。
在過去的幾個(gè)月中,GotDotNet 上的 RSS Bandit 工作區(qū)已經(jīng)收到了 .NET 框架開發(fā)人員社區(qū)多個(gè)成員(如Torsten Rendelmann、Michael Earls、Joe Feser)和許多RSS Bandit 工作區(qū)其他成員的踴躍投稿。本文描述在過去幾個(gè)月內(nèi) RSS Bandit 應(yīng)用程序中各種新增功能的內(nèi)部原理。
返回頁首
了解 RSS Bandit 的用戶界面
RSS Bandit 的用戶界面受郵件和新聞閱讀器(如 Microsoft Outlook? 和 Microsoft Outlook Express)的啟發(fā)。在 RSS Bandit 的當(dāng)前版本和上一篇文章中的版本之間有一個(gè)最顯著的區(qū)別,那就是用戶界面得到了改善。RSS Bandit 使用一個(gè)魔術(shù)庫,此庫是用戶界面控件的框架,它提供的功能比基本Windows 窗體控件更豐富。
圖 1. 用 RSS Bandit 閱讀新聞
魔術(shù)庫提供的強(qiáng)大功能之一就是能夠創(chuàng)建選項(xiàng)卡式窗格,此功能允許用戶在單個(gè)應(yīng)用程序中嵌套多個(gè)窗體。下面的圖 2 顯示魔術(shù)庫中的選項(xiàng)卡式窗格如何允許用戶從 RSS Bandit 內(nèi)部利用多個(gè) Web 瀏覽器窗口。
圖 2. 用 RSS Bandit 瀏覽 Web
返回頁首
RSS Bandit 結(jié)構(gòu)概述
RSS Bandit 應(yīng)用程序由兩個(gè)截然不同的部分組成:圖形用戶界面組件XML 和網(wǎng)絡(luò)組件。主要的 GUI 類是 WinGuiMain 和 RssBanditApplication 類,而主要的 XML 和網(wǎng)絡(luò)類是 RssHandler 和 RssLocater。
RssHandler 類按指定間隔時(shí)間下載 RSS 提要,并將它們提交給 CacheManager 來存儲(chǔ)。CacheManager 使用的存儲(chǔ)區(qū)與應(yīng)用程序的耦合程度不緊密,實(shí)際上,CacheManager 是一個(gè)抽象的類,目前它只有一個(gè)具體實(shí)現(xiàn),即用于將文件緩存到本地文件系統(tǒng)上的 FileCacheManager。這種靈活性意味著可以在將來引進(jìn)新類型的 CacheManager,以便使用更好、更優(yōu)化的存儲(chǔ)區(qū),如數(shù)據(jù)庫管理系統(tǒng)。同樣,RssHandler 類與用戶界面的耦合程度也不緊密,它可以由需要處理 RSS 提要的其他應(yīng)用程序重新使用。利用 RssHandler 類的客戶端會(huì)在實(shí)例化該類時(shí)注冊一個(gè)回調(diào)(委托)。然后,在下載新提要或更新后的提要時(shí),RssHandler 對(duì)象會(huì)調(diào)用已注冊的回調(diào)。有關(guān)要下載哪些提要的信息以及其他配置數(shù)據(jù),可從用 XML 編寫的提要訂閱列表中獲取。RssLocater 將在嘗試發(fā)現(xiàn)特定 Web 站點(diǎn)的 RSS 提要時(shí)使用,并在嘗試定位提要時(shí),使用一組定義完善的試探法。
RssBanditApplication 從ApplicationContext 繼承,并控制 WinGuiMain。這是一個(gè)Windows 窗體,其中包含一個(gè)樹視圖(用于顯示所訂閱提要的列表,這些提要可按自由定義的類別分組)、一個(gè)列表視圖(用于以您熟悉的任何 NNTP 閱讀器(如 Outlook Express)中的線程模式,來顯示有關(guān)當(dāng)前選定提要中項(xiàng)目的信息),以及一個(gè)內(nèi)嵌的 Web 瀏覽器(用于顯示項(xiàng)目內(nèi)容)。在啟動(dòng)時(shí),RssBanditApplication 會(huì)確認(rèn)是否有正在運(yùn)行的程序?qū)嵗H绻?,它?huì)向該實(shí)例轉(zhuǎn)發(fā)任一命令行參數(shù)并自行終止。如果沒有正在運(yùn)行的類實(shí)例,則 RssBanditApplication 會(huì)用 RssHandler 注冊一個(gè)委托,RssHandler 可管理 RSS 提要的下載和處理。在下載新提要或更新后的提要后,RssBanditApplication 會(huì)使用Safe, Simple Multithreading in Windows Forms, Part 1 文章(作者是 Chris Sells)中描述的方法,以線程安全方式通過委托進(jìn)行更新。
RssBanditApplication 類還可充當(dāng)多種用戶界面組件(菜單、工具欄按鈕、上下文菜單等)的中介,并可將操作委托給 WinGuiMain 和 RssHandler,或者在用戶與應(yīng)用程序交互時(shí)親自處理它們。每個(gè)可代表用戶啟動(dòng)操作的主要用戶界面組件都可實(shí)現(xiàn) ICommand 接口(命令模式)和 ICommandComponent 接口,以提取多個(gè)類的實(shí)現(xiàn)細(xì)節(jié)。
該用戶界面還允許用戶管理 RssHandler 類各個(gè)方面的行為。用戶可以在訂閱列表中添加和刪除提要、配置提要的下載頻率、按類別組織提要,以及設(shè)置代理服務(wù)器信息。RssItemFormatter 類可使用XslTransform 類來處理新聞項(xiàng)的顯示內(nèi)容,它使用用戶定義的 XSLT 樣式表,并將實(shí)現(xiàn)IXPathNavigable 接口的 RssItem 轉(zhuǎn)換為 HTML。
返回頁首
XML 技術(shù)和 RSS Bandit
RSS Bandit 應(yīng)用程序充分利用了 .NET 框架中的 XML 技術(shù)。RSS Bandit 可使用 XML 序列化在 XML 配置文件和對(duì)象之間進(jìn)行轉(zhuǎn)換;可使用 XSLT 來實(shí)現(xiàn)新聞項(xiàng)的可自定義視圖;可使用 XPath 來處理 RSS 提要的 HTML 內(nèi)容并刪除可能有惡意的元素;可使用 System.Xml.XmlWriter 類來確保它編寫格式正確的 XML,等等。
使用 XSLT 的可自定義主題
在 RSS Bandit 中閱讀新聞項(xiàng)時(shí),它們顯示在該應(yīng)用程序右下方的窗格中,此窗格實(shí)際上是一個(gè)嵌入式 Web 瀏覽器控件。使用嵌入式 Web 瀏覽器可以顯示新聞提要的內(nèi)容,初始版本的 RSS Bandit 并沒有利用它所帶來的靈活性。在當(dāng)前版本的 RSS Bandit 中,用戶可以創(chuàng)建一個(gè)XSLT 樣式表,以自定義新聞項(xiàng)在 Web 瀏覽器窗格中的顯示方式。圖 3 是一個(gè)配置菜單的屏幕快照,在這里,用戶可以從 RSS Bandit 應(yīng)用程序的模板文件夾中選擇特定的樣式表
圖 3. 選擇自定義樣式表
下載的每個(gè) RSS 提要都表示為一個(gè)包含 RssItem 對(duì)象列表的 FeedInfo 對(duì)象。RssItem 類可實(shí)現(xiàn)IXPathNavigable 接口,這意味著它是System.Xml.Xsl.XslTransform 類的 Transform 方法可接受的輸入內(nèi)容。在實(shí)現(xiàn) IXPathNavigable 接口時(shí),會(huì)將 RssItem 公開為RSS 2.0 XML 提要,其中包含一個(gè)代表 RssItem 中數(shù)據(jù)的項(xiàng)目。在 Web 瀏覽器窗格中顯示新聞項(xiàng)時(shí),當(dāng)前選定的 XSLT 樣式表和 RssItem 實(shí)例會(huì)作為輸入內(nèi)容傳遞到 XslTransform 類的 Transform 方法中,該方法隨后會(huì)在瀏覽器窗格中呈現(xiàn)轉(zhuǎn)換結(jié)果。
由于大多數(shù) RSS 提要在其內(nèi)容中不使用 XHTML,而是喜歡使用純文本或正規(guī) HTML,因此有必要使用Chris Lovett 的 SgmlReader 類來處理此類提要,SgmlReader 類可用于將 HTML 內(nèi)容轉(zhuǎn)換為 XHTML。
用 XSLT 導(dǎo)入提要列表
用于存儲(chǔ)用戶訂閱的 RSS 提要列表的現(xiàn)有 XML 格式有好幾種。這些格式包括OPMLOCS 和我在上一篇文章中為 RSS Bandit 選擇的格式。
盡管 RSS Bandit 在內(nèi)部適用于我的提要列表格式,但還可以導(dǎo)入 OPML 或 OCS 格式的提要列表。如果導(dǎo)入的提要列表不是 RSS Bandit 格式,則會(huì)檢查它是否為 OPML 或 OCS 格式。如果提要列表采用這兩種格式之一,則會(huì)針對(duì)導(dǎo)入的提要列表調(diào)用一個(gè)樣式表,以便將特定格式轉(zhuǎn)換為 RSS Bandit 提要列表格式。下面的樣式表可將 OCS 文件轉(zhuǎn)換為我的提要訂閱列表格式:
<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"xmlns="http://www.25hoursaday.com/2003/RSSBandit/feeds/"xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http://purl.org/metadata/dublin_core#"exclude-result-prefixes="dc rdf"><xsl:output method="xml" indent="yes" /><xsl:template match="/"><feeds><xsl:for-each select="/rdf:RDF/rdf:description/rdf:description"><feed><title><xsl:choose><xsl:when test="dc:title"><xsl:value-of select="dc:title" /></xsl:when><xsl:otherwise><link>No title for RSS feed provided in imported OCS</link></xsl:otherwise></xsl:choose></title><link><xsl:choose><xsl:when test="rdf:description/@about"><xsl:value-of select="rdf:description/@about" /></xsl:when><xsl:otherwise><link>No URL for RSS feed provided in imported OCS</link></xsl:otherwise></xsl:choose></link></feed></xsl:for-each></feeds></xsl:template></xsl:stylesheet>
將導(dǎo)入的文件轉(zhuǎn)換為 RSS Bandit 提要訂閱列表格式之后,它會(huì)與在啟動(dòng)時(shí)處理的提要訂閱列表的內(nèi)部表示形式合并在一起。
配置文件和 W3C XML 架構(gòu)
RSS Bandit 提要列表格式是使用 W3C XML 架構(gòu)定義 (XSD) 文件進(jìn)行描述的,該文件允許應(yīng)用程序利用.NET 框架的 XML 序列化功能將 XML 轉(zhuǎn)換為強(qiáng)類型對(duì)象,以便在與提要列表格式的內(nèi)容交互時(shí)提供更自然的編程模型。
RSS Bandit 的集成式搜索 功能也有一個(gè) XML 配置文件格式。用戶可以選擇使用一個(gè)或多個(gè)搜索引擎,直接從 RSS Bandit 用戶界面搜索 Web。在默認(rèn)情況下,配置文件包含有關(guān)GoogleFeedsterMSN Search 的信息。用戶還可以使用XmlSerializer 類來處理搜索配置文件,XmlSerializer 類可將搜索配置文件轉(zhuǎn)換為強(qiáng)類型對(duì)象的圖形,以提供一個(gè)更自然的編程模型來與配置信息進(jìn)行交互。下面是搜索配置文件的架構(gòu)。
<xs:schematargetNamespace=‘http://www.25hoursaday.com/2003/RSSBandit/searchConfiguration/‘xmlns:xs=‘http://www.w3.org/2001/XMLSchema‘ elementFormDefault=‘qualified‘xmlns:c=‘http://www.25hoursaday.com/2003/RSSBandit/searchConfiguration/‘><xs:element name=‘searchConfiguration‘><xs:complexType><xs:sequence><xs:element name=‘engine‘ minOccurs=‘0‘ maxOccurs=‘unbounded‘><xs:complexType><xs:sequence><xs:element name=‘title‘ type=‘xs:string‘ /><xs:element name=‘search-link‘ type=‘xs:anyURI‘><xs:annotation><xs:documentation>This defines the base URL of the search engine.The placeholder for the search expression is ‘[PHRASE]‘ withoutthe single quotes but with the brackets!</xs:documentation></xs:annotation></xs:element><xs:element name=‘description‘ type=‘xs:string‘ /><xs:element name=‘image-name‘ type=‘xs:string‘ /></xs:sequence><xs:attribute name=‘a(chǎn)ctive‘ type=‘xs:boolean‘ /></xs:complexType></xs:element></xs:sequence><xs:attribute name=‘open-newtab‘ type=‘xs:boolean‘ use=‘optional‘ /></xs:complexType></xs:element></xs:schema>
圖 4 顯示如何在 RSS Bandit 應(yīng)用程序中使用搜索配置文件中的信息。
圖 4. 從 RSS Bandit 搜索 Web
生成格式正確的 XML 和導(dǎo)出 OPML 文件
許多新聞集合器都使用OPML 格式來存儲(chǔ)提要列表信息,因此,該格式對(duì)于 RSS Bandit 的用戶非常有利,因?yàn)樗軌驅(qū)⑵鋬?nèi)部的提要列表導(dǎo)出到 OPML 文件中。在初始版本的 RSS Bandit 中,我用以下代碼生成了數(shù)個(gè)可用于幾個(gè)測試案例的 OPML 文件,但是很多用戶在嘗試此功能時(shí)失敗。
StringBuilder sb = new StringBuilder("<opml>\n<body>\n");if(_feedsTable != null){foreach(feedsFeed f in _feedsTable.Values){sb.AppendFormat("<outline title=‘{0}‘ xmlUrl=‘{1}‘/>\n", f.title, f.link);}}sb.Append("</body>\n</opml>");
上述代碼的問題在于,它同時(shí)處理了構(gòu)造 XML 和串聯(lián)文本值,盡管這是一個(gè)比較誘人的建議,但卻是錯(cuò)誤的。當(dāng)用戶在 RSS 提要的標(biāo)題中使用被 XML 視為特殊的字符(如和符號(hào) (&) 或單引號(hào) (‘))時(shí),RSS Bandit 會(huì)生成格式有誤的 XML。為了解決此問題,我決定使用專門針對(duì)編寫 XML 而設(shè)計(jì)的 .NET 框架類 —XmlWriter 類。下面是為了使用 XmlWriter 類而重寫的同一任務(wù)。
XmlTextWriter writer = new XmlTextWriter(feedStream,System.Text.Encoding.UTF8);writer.WriteStartElement("opml");writer.WriteStartElement("body");if(_feedsTable != null) {foreach(feedsFeed f in _feedsTable.Values) {writer.WriteStartElement("outline");writer.WriteAttributeString("title",f.title);writer.WriteAttributeString("xmlUrl", f.link);writer.WriteEndElement();}}writer.WriteEndElement(); //close <body>writer.WriteEndElement(); //close <opml>writer.Flush();writer.Close();XPath 和 RSS Bandit:自動(dòng)發(fā)現(xiàn)提要
在訂閱 Web 站點(diǎn)的 RSS 提要時(shí),主要困難之一就是發(fā)現(xiàn) RSS 提要的位置。在 2002 年 8 月,Mark Pilgrim 曾描述了一個(gè)超自由主義 RSS 定位器的算法,該算法由以下幾個(gè)步驟組成:
?
1給定 Web 站點(diǎn)的主要地址,下載主頁并查找指向 RSS 提要的 LINK 元素。如果您找到的話,就使用它們。
?
2如果該站點(diǎn)不支持通過 LINK 元素自動(dòng)發(fā)現(xiàn) RSS,請(qǐng)掃描主頁上的所有鏈接,并智能地猜測它們中的哪個(gè)(或哪些)指向 RSS 提要。同一服務(wù)器上以 .rss、.rdf 或 .xml 結(jié)尾的地址鏈接是主要候選提要。下載其中的每個(gè)鏈接,并通過檢查每個(gè)文件的初始內(nèi)容來查看哪個(gè)提要實(shí)際上是 RSS 提要。
?
3如果不成功,請(qǐng)?jiān)谕环?wù)器上查找地址中包含 rss、rdf 或 xml 的地址鏈接,查看它們是否為 RSS 文件。
?
4如果仍不成功,請(qǐng)按順序重復(fù)以上兩個(gè)步驟,但需要擴(kuò)展搜索范圍以包括外部服務(wù)器上的地址,這是因?yàn)樵S多 weblog 使用第三方服務(wù)來為它們的 Web 站點(diǎn)提供 RSS 提要。清除 127.0.0.1 地址,然后查看剩下的鏈接是否是 RSS 文件。
?
5如果仍不成功,請(qǐng)嘗試使用Syndic8。Syndic8 可跟蹤多個(gè)站點(diǎn)內(nèi)的成千上萬個(gè) RSS 提要,并提供一個(gè)以編程方式與它進(jìn)行交互的XML-RPC 接口
RSS Bandit 使用 RssLocater 類來實(shí)現(xiàn)上面的自動(dòng)發(fā)現(xiàn)過程。第一步涉及到下載 Web 站點(diǎn)并在其中搜索鏈接。作為一個(gè) XML 的狂熱支持者,我希望使用 XPath 在文檔中搜索鏈接,但意識(shí)到這會(huì)非常困難,因?yàn)榇蠖鄶?shù)站點(diǎn)都不是用基于 XML 的XHTML 標(biāo)記語言編寫的,而是用與 XML 不兼容的舊版 HTML 編寫的。在這種情況下,可以借助于Chris Lovett 的 SgmlReader 類。SgmlReader 類可以讀入 HTML 文檔并將它表示為 XML 文檔,隨后可以使用 .NET 框架中的傳統(tǒng) XML API 來處理此 XML 文檔。以下代碼片段顯示用戶如何使用 XPath 來獲取 HTML 文檔中引用 RSS 提要的所有 LINK 元素:
SgmlReader reader = new SgmlReader();reader.InputStream = new StreamReader(GetWebPage(url));reader.Href = url;reader.DocType= "HTML";XmlDocument doc = new XmlDocument();doc.XmlResolver = null;doc.Load(reader);ArrayList list = new ArrayList();//<link rel="alternate" type="application/rss+xml" title="RSS" href="url/to/rss/file">foreach(XmlNode node in doc.SelectNodes("http://*[local-name()=‘link‘ and@type=‘a(chǎn)pplication/rss+xml‘ and @title=‘RSS‘]/@href")){string url = ConvertToAbsoluteUrl(node.Value, node.BaseURI);if(LooksLikeRssFeed(url)){list.Add(url);}}
圖 5 中的屏幕快照顯示一個(gè)對(duì)話框,若在嵌入式 Web 瀏覽器中查看的站點(diǎn)是 MSDN 主頁,則在單擊 RSS Bandit 應(yīng)用程序上的 Autodiscover Feeds 按鈕時(shí),該對(duì)話框會(huì)彈出。
圖 5. 啟動(dòng)提要自動(dòng)發(fā)現(xiàn)功能
圖 6 中的屏幕快照顯示在站點(diǎn)中成功找到 RSS 提要的結(jié)果。
圖 6. 找到的提要
使用 XPath 篩選可能有惡意的內(nèi)容
如上所述,RSS 提要中的 HTML 內(nèi)容會(huì)先轉(zhuǎn)換為 XHTML,然后才顯示在瀏覽器窗格中。如果不注意從 RSS 提要的 HTML 內(nèi)容中去除可能有惡意的元素(如腳本塊),可能會(huì)導(dǎo)致安全問題。由于 RSS 提要中的 HTML 內(nèi)容是使用Chris Lovett 的 SgmlReader 類轉(zhuǎn)換為 XHTML 的,因此可以方便地使用 XPath 和 XmlDocument 類來去除不需要的標(biāo)記。以下代碼片段顯示如何使用 XPath 從 RSS 提要的內(nèi)容中篩選掉可能有惡意的元素和屬性。
//remove potentially malicious tagsstring badtagQuery = "http://@style | //*[local-name()=‘script‘ or local-name()=‘object‘or local-name()=‘embed‘ or local-name()=‘iframe‘ or local-name()=‘meta‘ or local-name()=‘frame‘or local-name()=‘frameset‘ or local-name()=‘link‘ or local-name()=‘style‘]";foreach(XmlNode badtag in doc.SelectNodes(badtagQuery)){XmlAttribute badattr = badtag as XmlAttribute;if(badattr != null){badattr.OwnerElement.Attributes.Remove(badattr);}else{badtag.ParentNode.RemoveChild(badtag);}}從 RSS Bandit 張貼注釋
我最初創(chuàng)建 RSS Bandit 的目的是將它用作跟蹤經(jīng)常訪問的多個(gè) weblog 的方法。在早些時(shí)候,我認(rèn)為 weblog 的一個(gè)有趣方面就是它們的對(duì)話特性,特別是用戶可以通過 Web 觀看討論場面的方式。RSS Bandit 有許多嘗試?yán)?weblog 對(duì)話特性的功能。
如果特定 RSS 提要中的某個(gè)新聞項(xiàng)引用 RSS Bandit 中的其他新聞項(xiàng),或被其他新聞項(xiàng)引用,則這種關(guān)系會(huì)顯示在用戶界面中,作為電子郵件和新聞閱讀器的線程消息回放。這提供了一個(gè)非常直觀的機(jī)制,用于在用戶訂閱的 weblog 上跟蹤討論,這是因?yàn)榛ハ嘁玫奶訒?huì)顯示在一起。RSS Bandit 還提供了多種方法,與為響應(yīng)特定新聞項(xiàng)而張貼的注釋進(jìn)行交互,具體方法取決于其 RSS 提要中提供的信息。用于提供有關(guān)新聞項(xiàng)注釋信息的 RSS 元素有許多,其中包括 comment 元素(它提供一個(gè)鏈接,用戶可以在此處于用戶界面中張貼新聞項(xiàng)注釋)、slash:comments 元素(用于指出為響應(yīng)新聞項(xiàng)而張貼的注釋數(shù)量)、wfw:commentRss 元素(為新聞項(xiàng)注釋提供 RSS 提要的位置)和 wfw:comment 元素(它提供的 URI 可接受作為新聞項(xiàng)答復(fù)來發(fā)送的 RSS 項(xiàng),新聞項(xiàng)使用的是 HTTP POST)。
RSS Bandit 支持上面的元素,這些元素提供有關(guān)特定新聞項(xiàng)注釋的信息。下面的圖 7 是 RSS Bandit 的屏幕快照,它顯示全部四個(gè)與注釋有關(guān)的使用中 RSS 元素。
圖 7. 從 RSS Bandit 閱讀和張貼注釋
將注釋張貼到 RSS Bandit 的機(jī)制是CommentAPI,CommentAPI 指定應(yīng)用程序如何通過將RSS 項(xiàng)張貼到特定 URI 來發(fā)送對(duì) RSS 提要中新聞項(xiàng)的響應(yīng)。以下代碼片段顯示 RSS Bandit 如何使用 HTTP POST 來發(fā)送對(duì) RSS 提要中新聞項(xiàng)的答復(fù)。
public HttpStatusCode PostCommentViaCommentAPI(string url, RssItem item){HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);request.Timeout = 1 * 60 * 1000; //one minute timeoutrequest.UserAgent = this.UserAgent;request.Proxy = this.Proxy;request.Credentials = CredentialCache.DefaultCredentials;request.Method = "POST";request.ContentType = "text/xml";string comment = item.ToString(true);request.ContentLength = comment.Length;StreamWriter myWriter = null;try{myWriter = new StreamWriter(request.GetRequestStream());Trace.WriteLine(comment);myWriter.Write(comment);} catch(Exception e){throw new WebException(e.Message, e);}finally{if(myWriter != null){myWriter.Close();}}HttpWebResponse response = (HttpWebResponse) request.GetResponse();return response.StatusCode;}
應(yīng)注意的是,對(duì) CommentAPI 的支持尚不普及。CommentAPI 實(shí)現(xiàn)列表中提供了支持 CommentAPI 的 Web 站點(diǎn)列表。一個(gè)值得注意的 CommentAPI 支持程序是.Text blog 引擎,Weblogs @ ASP.NETWeblogs @ DotNetJunkies.com 均使用該引擎。
RSS Bandit 有一個(gè)虛擬文件夾,其中存儲(chǔ)有通過圖 8 所示的 CommentAPI 張貼的所有注釋。
圖 8. 已發(fā)送項(xiàng)目文件夾
插件結(jié)構(gòu)
在最近的一個(gè)名為在 CLR 中傳遞 XML 數(shù)據(jù)的 MSDN TV 情節(jié)中,Don Box 描述了在 .NET 框架的應(yīng)用程序之間傳遞 XML 的各種機(jī)制。用戶可以將許多類型選作 .NET 框架中 XML 文檔的表示形式,如String、IXPathNavigable、XmlDocumentXmlReader 類的實(shí)例,它們各有利弊。最近,Simon Fell 建議將IBlogExtension 接口用作基于 .NET 框架構(gòu)建的新聞集合器的通用機(jī)制,以便與插件共享信息,并選擇IXPathNavigable 接口作為在新聞集合器和插件之間傳遞 XML(特別是 RSS 項(xiàng))的方法。
RSS Bandit 支持 IBlogExtension 接口,因此允許開發(fā)人員構(gòu)建與 RSS Bandit 集成的插件。圖 9 中的屏幕快照顯示與 w.bloggar 插件(位于 http://www.sharpreader.net/wBloggarPlugin.zip 上,由 Luke Hutteman 編寫)的集成,該插件使用戶能夠使用流行的w.bloggar weblog 編輯器在他們的 weblog 中張貼特定新聞項(xiàng)。
圖 9. 從 RSS Bandit 張貼到 Weblog
返回頁首
RSS Bandit 的未來規(guī)劃
自從我發(fā)表上一篇文章以來,RSS Bandit 已經(jīng)得到突飛猛進(jìn)的發(fā)展,這主要是由于我和Torsten Rendelmann 的不懈努力以及RSS Bandit 工作區(qū)中許多人的幫助。我打算繼續(xù)與 .NET 開發(fā)人員社區(qū)中的各位成員一起開發(fā) RSS Bandit,并一直將它用作顯示 .NET 框架功能的方法,以及構(gòu)建利用 XML 強(qiáng)大功能的豐富客戶端應(yīng)用程序的平臺(tái)。
在下一版本的 RSS Bandit 中,我希望看到幾個(gè)功能,如使用更新程序塊進(jìn)行自動(dòng)更新、新聞項(xiàng)選擇的類似于報(bào)紙的視圖,以及從 RSS Bandit 直接編輯用戶的 weblog 的功能。如果您愿意協(xié)助我們向 RSS Bandit 中添加這些功能或其他功能,歡迎您加入該工作區(qū)并提供幫助。您的幫助對(duì)我們總是有用的。
Dare Obasanjo 是 Microsoft 的 WebData 組的成員,該小組在 .NET 框架的 System.Xml 和 System.Data 命名空間、Microsoft XML 核心服務(wù) (MSXML) 和 Microsoft 數(shù)據(jù)訪問組件 (MDAC) 中開發(fā)組件。
有關(guān)本文的任何問題或評(píng)論,歡迎張貼到 GotDotNet 上的Extreme XML 留言板。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
全面了解和解析Blog和RSS的含義
XSLT轉(zhuǎn)換XML小結(jié)
博雅資源網(wǎng) - 文章中心 - 用ASP.NET建立一個(gè)在線RSS新聞聚合器
在ASP中使用RSS
記錄一下踩過的坑之xml(既是個(gè)R包,也是種文件格式)
Templates文件夾里面的東西能刪除嗎?
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服