2010-02-01 7 views
2

J'utilise Feedzirra pour analyser mes flux RSS et cela fonctionne très bien - il est deux fois plus rapide Feed Normalizer dans mes tests initiaux. Plus important encore, il a de beaux wrappers qui vérifient les entrées mises à jour dans un flux. Quand j'utilisais son approche alimentation mise à jour, je suis tombé sur quelques questions:Vérification des flux RSS mis à jour avec Feedzirra

require 'feedzirra' 

feed = Feedzirra::Feed.fetch_and_parse("http://feeds.feedburner.com/TechCrunch") 
puts feed.etag #outputs the right tag 

Le code ci-dessus imprime le ETag correct (vérifié avec Firebug). Maintenant, quand je veux vérifier les mises à jour, feedzirra vous demande les etags actuels, la date de dernière modification, etc. Quand je lui donne le bon ETag, il dit qu'il n'y a pas de mises à jour - c'est génial. Cependant, si je ne spécifie pas de ETag, il n'attrape pas le dernier ETag après avoir saisi tous les flux. C'est un problème parce que si une mise à jour se produit et que j'ai un ETag obsolète, je ne serai jamais capable d'attraper le ETag court d'appeler fetch_and_parse - une perte d'un autre fetch.

feed_to_update = Feedzirra::Parser::Atom.new 
feed_to_update.feed_url = "http://feeds.feedburner.com/TechCrunch" 
feed_to_update.etag = nil 
feed_to_update.last_modified = nil 

last_entry = Feedzirra::Parser::AtomEntry.new 
last_entry.url = nil 

feed_to_update.entries = [last_entry] 

updated_feed = Feedzirra::Feed.update(feed_to_update) 

puts updated_feed.updated? 
puts updated_feed.etag 

L'exemple ci-dessus est une version modifiée qui fait partie de la documentation de l'auteur: http://gist.github.com/132671. J'ai également essayé de donner une valeur ETag précédente et elle n'est pas mise à jour - j'ai choisi d'utiliser nil dans le code ci-dessus parce que les ETags changent fréquemment pour Techcrunch.

La sortie que je reçois est:

true  

#note the above line is blank (basically printing nil) 

que je fais quelque chose de mal et d'utiliser les fonctions correctement de quelque façon? ou est-ce un bug avec le programme? Avez-vous d'autres suggestions sur la recherche de flux mis à jour? Btw, j'ai aussi essayé d'utiliser la valeur 'last-modified-date' et pense toujours qu'il y a de nouvelles entrées même si la date correspond à la réponse de l'en-tête.

Merci, -e

mise à jour: Dans la sortie, je l'avais mal tapé 25 au-dessus de la ligne blanche. Je l'ai réparé maintenant. Pardon.

Répondre

0

J'ai regardé le code source et trouvé que etag n'était pas correctement mis à jour. Donc, cela semble fixer:

Après la ligne ci-dessous (en add_feed_to_multi() de feed.rb)

feed.update_from_feed(updated_feed) 

J'ai ajouté cette ligne:

feed.etag = updated_feed.etag 

Je n'ai toujours pas trouvé façon de résoudre les problèmes last_modified mais pour l'instant, les etags fonctionnent.