отслеживать изменения HTML с помощью хэш-функции - PullRequest
0 голосов
/ 11 марта 2012

Я хочу написать приложение, которое получает список URL.

Для каждого из них мне нужно периодически отслеживать, изменился ли контент.

Я думал:

  1. , чтобы использовать HtmlAgilityPack для извлечения html-контента (любая другая рекомендация?)

  2. Мне не нужно определять само изменение,

так что я, хотя и хеширую содержимое, сохраняю в БД

и сравните его в будущем.

Как бы вы предложили хеширование? .HetHashCode ()?

я видел эту документацию http://support.microsoft.com/kb/307020

, которые советуют использовать

tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData);

почему

Ответы [ 2 ]

0 голосов
/ 11 марта 2012

Как вы просили предложений.Я бы использовал этот метод вместо

WebClient client = new WebClient();
String htmlCode = client.DownloadString("http://google.com");

И я бы сохранил эту строку в моей БД.После определенного интервала я мог бы сравнить их снова.

Но да, я согласен, что размер строки будет действительно большим.Если я просто хочу получить уведомление о том, что содержание изменилось как-то.Я бы использовал MD5.В результате размер строки MD5 составляет всего 27 символов.

Следовательно, проще сравнивать и хранить в БД

0 голосов
/ 11 марта 2012

Вы должны абсолютно не использовать GetHashCode() для этого. документация прямо заявляет:

. Кроме того, .NET Framework не гарантирует реализацию по умолчанию метода GetHashCode, и возвращаемое значение будет одинаковым для разных версий.NET Framework.

Результаты GetHashCode могут изменяться между запусками - все, что гарантировано, это вызов его для двух равных объектов в одном и том же процессе (возможно, AppDomain)даст тот же хэш-код.Действительно, алгоритм String.GetHashCode изменил с течением времени, а в .NET 4 32-разрядная реализация отличается от 64-разрядной реализации.

Если вы хотите использовать хеширование, используйте MD5, SHA1 и т. д. - что-то с указанным алгоритмом, который не изменит .(Обратите внимание, что эти операции над двоичными данными, а не строковыми данными, что, вероятно, также более уместно - вам не нужно беспокоиться о декодировании данных в виде текста.)

Мне не ясно, периодически ли выполняется повторное получение действительно лучшая идея, хотя - эти серверы не поддерживают время последнего изменения, etags и т. Д.

...