Получить новые предметы из RSS-ленты - PullRequest
0 голосов
/ 12 февраля 2019

Я использую python feedparser для анализа некоторых RSS-каналов (каждые 2 часа), к сожалению, RSS-каналы не содержат etag или измененные значения, и поэтому каждый раз, когда я анализирую каналы, я получаю все данные целиком.Я подумываю о создании хэша записей, возвращаемых из feedparser.parse, и сохранении его в базе данных, чтобы в следующий раз, когда я снова проанализирую, я мог сравнить с хешем и посмотреть, изменился ли фид, и только затем начать анализ для каждого элемента.в ленте Мои вопросы

  1. Есть ли другой / лучший способ узнать, обновился ли RSS-канал
  2. Как создать хэш?Достаточно ли просто сделать следующее

    import hashlib 
    hash_object = hashlib.sha256(<FEEDPARSER_RESPONSE>)
    hex_dig = hash_object.hexdigest() 
    
  3. Сохранить hex_dig в базе данных

1 Ответ

0 голосов
/ 12 февраля 2019

Целесообразно хэшировать FEEDPARSER_RESPONSE, особенно если в вашем фиде нет etag или измененных значений.Вы не предоставили ссылку для своего RSS-канала, поэтому я использую один из CNN для своего ответа.

import hashlib
import feedparser

cnn_top_news = feedparser.parse('http://rss.cnn.com/rss/cnn_topstories.rss')

# I using entries, because in testing it gave me the same hash.
news_updated = cnn_top_news.entries

###################################################################
# During testing all of these items worked for creating the hash.
# So there are multiple options to choice from.   
#
# cnn_top_news['entries']
# titles = [entry.title for entry in cnn_top_news['entries']]
# summaries = [entry.summary for entry in cnn_top_news['entries']]
###################################################################

hash_object = hashlib.sha256(str(news_updated).encode('utf-8'))
hex_dig = hash_object.hexdigest()

print (hex_dig)
# output 
371c5730c7f1407878a32a814bc72542b48a43e1f7670eae0627d2617289161b
...