2

私はFeedzirraを使用してRSSフィードを解析していますが、これは非常にうまく機能します。最初のテストでは、FeedNormalizerの2倍の速度です。さらに重要なことに、フィード内の更新されたエントリをチェックする優れたラッパーがあります。フィード更新アプローチを使用していたときに、いくつかの問題が発生しました。

require 'feedzirra'

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

上記のコードは正しいETagを出力します(Firebugでチェック)。さて、更新を確認したいとき、feedzirraは現在のetag、最終更新日などを尋ねます。正しいETagを与えると、更新がないと表示されます。これはすばらしいことです。ただし、ETagを指定しないと、すべてのフィードを取得した後、最新のETagを取得しません。これは問題です。更新が発生し、古いETagがある場合、fetch_and_parseを呼び出さないと、現在のETagを取得できなくなります。これは別のフェッチの無駄です。

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

上記の例は、作成者からのドキュメントの一部である変更バージョンです:http: //gist.github.com/132671。また、以前のETag値を指定しようとしましたが、更新されません-TechcrunchではETagが頻繁に変更されるため、上記のコードではnilを使用することにしました。

私が得る出力は次のとおりです。

true    

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

私は何か間違ったことをしていて、何らかの方法で関数を間違って使用していますか?それともこれはプログラムのバグですか?更新されたフィードを探す方法に関する他の提案はありますか?

ところで、私も「last-modified-date」の値を使用してみましたが、日付がヘッダーの応答と一致していても、常に新しいエントリがあると見なされます。

ありがとう、-e

更新:出力で、空白行の上に25を誤って入力しました。私は今それを修正しました。ごめん。

4

1 に答える 1

0

ソースコードを調べたところ、etagが適切に更新されていないことがわかりました。だからこれはそれを修正するようです:

以下の行の後(feed.rbのadd_feed_to_multi()内)

feed.update_from_feed(updated_feed) 

私はこの行を追加しました:

feed.etag = updated_feed.etag 

last_modifiedの問題を解決する方法はまだ見つかりませんが、今のところetagは機能しています。

于 2010-02-01T23:01:16.413 に答える