Как проверить, обновлен ли 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
Но некоторые серверы не поддерживают его, поэтому вам нужно просто проверить даты и идентификаторы дат и посмотреть, есть ли у вас такие сообщения в вашей базе данных или нет.