2010-02-01 3 views
2

Feedzirra를 사용하여 RSS 피드를 구문 분석하면 매우 잘 작동합니다. 초기 테스트에서 Feed Normalizer가 두 배 빠릅니다. 더 중요한 것은 피드 안에 업데이트 된 항목을 확인하는 멋진 래퍼가 있다는 것입니다. 나는 그것의 공급 업데이트 방법을 사용되었을 때, 나는 몇 가지 문제로 실행 :Feedzirra로 업데이트 된 RSS 피드 확인하기

require 'feedzirra' 

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

위의 코드는 (방화범으로 확인) 정확한의 ETag를 인쇄합니다. 이제 업데이트를 확인하려고 할 때 feedzirra가 현재 etags, 마지막 수정 날짜 등을 묻습니다. 내가 올바른 ETag를 주면 업데이트가 없다고 말합니다 - 훌륭합니다. 그러나 ETag를 지정하지 않으면 모든 피드를 가져온 후 최신 ETag를 가져 오지 않습니다. 업데이트가 발생하고 오래된 ETag가 있으면 fetch_and_parse를 호출하지 않으면 현재 ETag를 가져올 수 없으므로 문제가됩니다. 즉, 다른 페치를 낭비하기 때문입니다. http://gist.github.com/132671 :

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 

위의 예는 저자의 설명서의 일부 수정 된 버전이다. 또한 이전의 ETag 값을 제공하려고 시도했지만 업데이트되지 않습니다. ETag가 Techcrunch에서 자주 변경되기 때문에 위 코드에서 nil을 사용하기로했습니다.

내가 얻을 출력은 다음과 같습니다

true  

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

내가 뭔가 잘못하고 어떤 방법으로 잘못 함수를 사용하고 있습니까? 아니면이 프로그램의 버그입니까? 업데이트 된 피드를 찾는 방법에 대한 다른 제안 사항이 있습니까?

Btw, 나는 또한 'last-modified-date'값을 사용하려고 시도했으며 날짜가 헤더 응답과 일치하더라도 항상 새 항목이 있다고 생각합니다.

감사합니다, -e

업데이트 : 내가 잘못 빈 줄 위 (25)에 입력 한 출력에서 ​​. 나는 그것을 바로 잡았다. 죄송합니다.

답변

0

소스 코드를보고 etag이 제대로 업데이트되지 않았 음을 알았습니다. 내가이 줄을 추가

feed.update_from_feed(updated_feed) 

(feed.rb의 add_feed_to_multi()에서) 아래에 선 후

: 그래서이 문제를 해결할 것으로 보인다

feed.etag = updated_feed.etag 

난 아직 발견하지 않은 방법은 last_modified 문제를 해결하지만 지금 etags 작동합니다.