Проверка RSS-каналов на новый контент с feedparser - PullRequest
2 голосов
/ 20 декабря 2011

Я использую python для создания приложения, которое функционирует аналогично RSS-агрегатору.Я использую библиотеку feedparser для этого.Тем не менее, я изо всех сил пытаюсь заставить программу правильно определять наличие нового контента.

В основном меня интересуют новостные ленты.Кроме того, чтобы увидеть, был ли добавлен новый элемент в канал, я также хочу иметь возможность определить, была ли обновлена ​​предыдущая статья.Кто-нибудь знает, как я могу использовать feedparser для этого, учитывая, что единственными обязательными элементами элемента являются либо заголовок, либо описание?Я готов предположить, что элемент ссылки всегда будет присутствовать.

Атрибут «id» Feedparser, связанный с каждым элементом, кажется просто ссылкой на статью, так что это может помочь в обнаружении новых статей наканал, но не с обнаружением обновлений к предыдущим статьям, поскольку «id» для них не изменится.

Я просматривал предыдущие потоки на stackoverflow, и некоторые люди предлагали хэшировать содержимое или заголовок хэширования +url, но я не совсем уверен, что это значит или как можно поступить (если это действительно правильный подход).

1 Ответ

4 голосов
/ 20 декабря 2011

Хеширование в этом контексте означает вычисление более короткого значения для представления каждой комбинации URL и заголовка. Этот подход работает, когда вы используете хеш-функцию, которая обеспечивает низкие шансы на столкновение (два разных элемента генерируют одинаковое значение).

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

Так, например.

>>> import hashlib
>>> url = "http://www.example.com/article/001"
>>> title = "The Article's Title"
>>> id = hashlib.md5(url + title).hexdigest()
>>> print id
785cbba05a2929a9f76a06d834140439
>>> 

Это предоставит идентификатор, который изменится, если URL или заголовок изменится, что будет означать, что это новая статья.

Вы можете загрузить и добавить содержимое статьи в хеш, если вы также хотите обнаружить изменения в содержимом статьи.

Обратите внимание: если вы намереваетесь перетаскивать целые страницы вниз, возможно, вы захотите узнать о HTTP conditional GET with Python, чтобы сэкономить пропускную способность и немного дружелюбнее относиться к сайтам, на которые вы заходите.

...