2013-01-10 12 views
11

Sto usando la libreria feedparser in Python per ottenere i vari dettagli da un feed RSS. Supponiamo di aver estratto 25 titoli di titoli da un feed RSS di un canale di notizie. Dopo un'ora eseguo di nuovo il comando feedparser per ottenere l'ultimo elenco dei titoli dei 25 nuovi titoli. L'elenco potrebbe essere aggiornato o meno la seconda volta che eseguo il comando feedparser. Alcuni titoli potrebbero essere uguali e alcuni potrebbero essere nuovi. Devo essere in grado di verificare se c'è stato un aggiornamento in uno dei titoli delle notizie con i titoli che sono stati estratti l'ora prima. Solo i nuovi titoli devono essere inseriti in un database. Questo per evitare che duplicati vengano scaricati nel database.Come verificare se un feed RSS è stato aggiornato in Python?

Il codice si presenta come di seguito:

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

ho bisogno di essere in grado di eseguire il codice sopra ogni ora e verificare se ci fosse alcun aggiornamento in prima pagina (titolo). E se ci fosse stato qualche cambiamento con i dati estratti l'ora prima, solo i nuovi dati dovrebbero essere scaricati nel database.

Qualcuno può aiutarmi?

risposta

13

Ogni articolo di feed ha un identificativo, in item.id. Traccia quelli, insieme alla loro voce .updated (o .updated_parsed), per verificare la presenza di nuovi elementi.

Quindi, vedere se l'articolo è già stato visualizzato (tramite item.id) o se è stato aggiornato dall'ultima volta che è stato selezionato (tramite item.updated o item.updated_parsed).

Assicurarsi di utilizzare il feedparser E-Tag support per verificare se il contenuto del feed è cambiato. Questo ti farà risparmiare solo dal download di feed senza nuovi elementi; è ancora necessario rilevare elementi aggiunti o aggiornati quando si ottiene una nuova copia del feed.

1

Per "buono" feed è possibile utilizzare ETag e ultimo-modfied-dal meccanismo, è descritto qui http://www.kbcafe.com/rss/rssfeedstate.html

Ma alcuni server non lo supporta, quindi è necessario controllare semplicemente le date postali e ids e vedere , hai questi messaggi nel tuo DB o no.

Problemi correlati