Как проверить, обновлен ли RSS-канал в Python?

Я использую библиотеку feedparser в Python, чтобы получить различные данные из RSS-канала. Предположим, я вытащил 25 заголовков заголовков из RSS-канала новостного канала. Через час я снова запустил команду feedparser, чтобы получить последний список названий 25 новых заголовков. Список может быть обновлен или не обновляться во второй раз, когда я запустил команду feedparser. Некоторые заголовки могут быть одинаковыми, а некоторые могут быть новыми. Мне нужно проверить, было ли обновление в любом из заголовков новостей с заголовками, которые были выведены за час раньше. Только новые заголовки должны быть введены в базу данных. Это делается для того, чтобы избежать дублирования, сбрасываемого в базу данных.

Код выглядит следующим образом:

import feedparser
d = feedparser.parse('www.news.example.xml')
for item in d.entries:
    hndlr.write(item.title)  #data being dumped into a database

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

Кто-нибудь может помочь мне?

Ответ 1

Каждый элемент фида имеет идентификатор в item.id. Отслеживайте их вместе со своей записью .updated (или .updated_parsed) для проверки новых элементов.

Итак, посмотрите, если вы уже видели этот элемент (через item.id), или если он был обновлен с момента последнего проверки (через item.updated или item.updated_parsed).

Убедитесь, что вы воспользовались поддержкой feedparser E-Tag, чтобы проверить наличие измененного содержимого. Это избавит вас от загрузки фидов без новых элементов; вам все равно нужно обнаружить, что элементы были добавлены или обновлены, когда вы получаете новую новую копию фида.

Ответ 2

Для "хороших" каналов вы можете использовать механизм ETag и last-modfied-since, описанный здесь http://www.kbcafe.com/rss/rssfeedstate.html

Но некоторые серверы не поддерживают его, поэтому вам нужно просто проверить даты и идентификаторы дат и посмотреть, есть ли у вас такие сообщения в вашей базе данных или нет.