我的应用程序正在阅读许多不受我控制的公共RSS源。不幸的是,我遇到了各种各样的问题(比如CDATA标签内部的XML实体应该只是文字字符,缺少必需的元素,......)。通过添加检测例程,我能够解决所有这些问题。现在我发现了一个发送guid的feed,但是对于不同的文章总是相同的10个guid!我现在应该如何检测新的饲料项目呢?
这就是我所说的互联网安全:我需要一个RSS库,它可以保护我免受格式错误的饲料,使用1500个饲料的饲料(也见过......),以及可靠的新项目检测。任何人都可以分享对.NET的推荐吗?
答案 0 :(得分: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
无法解决格式错误的Feed,这只是解析rss的事实。我已经看到xml清洁工作为桌面应用程序,但不是作为库。通常我会记录一个解析错误,如果相同的Feed错误超过24小时,则会发出警报。我已经看到一些Feed有几个小时的问题,我确信由于代码更改后来得到修复。
谷歌似乎也采用了这种方法。如果饲料是borked他们继续尝试,直到它被修复,不知道他们实际重试的频率&gt;几个小时<=天。通过观看使用google的原子网址打破的Feed来查看最新项目最终显示的时间。我注意到饲料已经固定了几个小时。这是我用来检查谷歌项目外观的网址。 http://www.google.com/reader/atom/feed/ [feedurl] N = 20
不要将XmlDocument用于RSS应用程序,坚持使用XmlReader或XmlPathDocument。 XmlPathDocument + navigator非常适合检测未编码的新节点。
答案 1 :(得分:0)
RSS Streams必须是XML,否则它们无效,并且可能会被标准RSS阅读器丢弃。
您是否正在使用.NET XmlDocument或XmlReader阅读这些Feed?在这种情况下,您不必进行“解决”。