Безопасная Интернет-библиотека для разбора RSS, необходимая для .NET с обнаружением новых элементов - PullRequest
0 голосов
/ 03 декабря 2010

Мое приложение читает множество общедоступных RSS-каналов, которые не находятся под моим контролем.К сожалению, я столкнулся с различными проблемами (такими как объекты XML внутри тегов CDATA, которые должны быть буквальными символами, отсутствующие обязательные элементы, ...).Я смог обойти все это, добавив процедуры обнаружения.Теперь я нашел канал, который отправляет руководства, но всегда одни и те же 10 направляющих для разных статей!Как я теперь должен обнаруживать новые элементы фида, теперь?

И это то, что я имею в виду под интернет-безопасностью: мне нужна библиотека RSS, которая может защитить меня от искаженных фидов, работает с фидом с 1500 энтами (видел это тоже ...), и который делает надежное обнаружение новых предметов.Кто-нибудь может поделиться рекомендацией для .NET?

Ответы [ 2 ]

1 голос
/ 06 декабря 2010

Обнаружение новых предметов - это боль, но хеширование может очень помочь. Лично я предпочитаю получить хеш для всего файла и сохранить его для сопоставления. Затем, когда вы нажимаете каждый элемент, хэшируйте innerxml и проверяйте, есть ли у вас его. Хэширование каждого элемента поможет вам управлять обновлениями, когда GUID одинаков. Раньше я пытался использовать GUID, но это просто не стоит боли. Вот функция md5, которую я использовал в движке rss под .net 2.0, но не уверен, что есть лучший способ под 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 часов. Я видел, что у нескольких фидов были проблемы в течение нескольких часов, я уверен из-за изменения кода, которое позже было исправлено.

Кажется, что Google также использует этот подход. Если подача прерывается, они продолжают пытаться, пока она не будет исправлена, не зная, как часто они на самом деле повторяют> несколько часов <= день. Выяснили это, просмотрев канал, который был прерван с помощью URL атома Google, чтобы увидеть, когда наконец появился новый элемент. прошло несколько часов после того, как я заметил, что канал был исправлен. </p>

Вот URL, который я использовал, чтобы проверить Google для внешнего вида элементов. http://www.google.com/reader/atom/feed/[feedurl]?n=20

Не используйте XmlDocument для приложений RSS, придерживайтесь XmlReader или XmlPathDocument. XmlPathDocument + navigator удобен для обнаружения новых узлов, для которых вы не кодировали.

0 голосов
/ 03 декабря 2010

Потоки RSS должны быть XML, в противном случае они недопустимы и, вероятно, будут отбрасываться стандартными программами чтения RSS.

Читаете ли вы эти каналы с помощью .NET XmlDocument или XmlReader?В этом случае вам не нужно делать «обходные пути».

...