2010-12-03 45 views
0

我的應用程序正在閱讀許多不受我控制的公共RSS源。不幸的是,我遇到過各種問題(比如CDATA標籤中的XML實體,它們應該只是文字字符,缺少必需的元素,...)。我可以通過添加檢測例程來解決所有這些問題。現在我發現了一個發送guid的feed,但是對於不同的文章總是有10個guid!我現在應該如何檢測新的飼料項目?.NET需要互聯網安全的RSS解析庫,包含新項目檢測

這就是我所說的互聯網安全:我需要一個RSS庫,它可以屏蔽我不受格式錯誤的提要的影響,可以與1500個提要一起使用(也見過...)物品檢測。任何人都可以分享一個.NET的建議嗎?

回答

1

新項目檢測是一種痛苦,但哈希可以幫助很多。我個人更喜歡爲整個文件獲得一個散列並將其存儲以進行匹配。然後,當你擊中每個項目散列innerxml並檢查,看看你是否已經擁有它。散列每個項目將幫助您在GUID相同時管理更新。我曾嘗試使用GUID,但它不值得痛苦。這裏是我在.net 2.0下的rss引擎中使用的md5函數,不確定是否有更好的方法在4.0下。

Imports System.Security.Cryptography 

Function getMD5Hash(ByVal strToHash As String) As String 
    Dim md5Obj As New MD5CryptoServiceProvider 
    Dim bytesToHash() As Byte = System.Text.Encoding.ASCII.GetBytes(strToHash) 
    bytesToHash = md5Obj.ComputeHash(bytesToHash) 
    Dim strResult As String = "" 
    For Each b As Byte In bytesToHash 
     strResult += b.ToString("x2") 
    Next 
    Return strResult 
End Function 

無法幫助畸形的提要,這只是解析RSS的事實。我已經將xml清潔程序看作桌面應用程序,但不是作爲庫。通常我會記錄一個分析錯誤,並在24小時內發送相同的錯誤提示。我已經看到許多Feed有幾個小時的問題,我相信由於後來修復的代碼更改。

谷歌似乎也採取這種方法。如果飼料是borked,他們會繼續嘗試,直到它被修復,不知道他們多久會重試>幾小時< =一天。通過觀看使用谷歌原子網站中斷的Feed,發現最新項目最終顯示的時間。我注意到飼料已經固定好幾個小時。

下面是我用來檢查谷歌項目外觀的網址。 http://www.google.com/reader/atom/feed/[feedurl]?n=20

不要在RSS應用中使用XmlDocument,請使用XmlReader或XmlPathDocument。 XmlPathDocument +導航器很適合檢測未編碼的新節點。

0

RSS流必須是XML,否則它們是無效的,並且可能會被標準的RSS閱讀器丟棄。

您是否正在使用.NET XmlDocument或XmlReader閱讀這些提要?在這種情況下,你不應該做「變通」。

+0

嗯,問題是,我必須閱讀的飼料不符合。這就像網絡上HTML符合的現狀。 – usr 2010-12-03 14:03:47

+0

這很奇怪。你的意思是當你嘗試讀取XmlDocument時拋出?如果是這樣的話,任何人都不應該能夠閱讀它。 – 2010-12-03 14:12:25