2013-08-19 7 views
3

Следующий код от сущности на Feedzirra, чтобы получить обновленный контент из RSS Feed:Feedzirra - Как получить обновленную RSS-ленту?

feed = Feedzirra::Feed.fetch_and_parse(feed_url) 
feed = Feedzirra::Feed.update(feed) 
do_something_with_new_feed(feed.new_entries) if feed.updated? 

Я не понимаю, как Feedzirra бы знать подача была обновлена. Я не могу заставить его работать. Чтобы узнать, я должен был бы передать объект Feed, который был возвращен ранее (минуты или несколько часов назад) Feedzirra::Feed.fetch_and_parse(feed_url) в Feedzirra::Feed.update, нет? Как узнать, обновлен ли он, если я использую канал, который у меня был только fetch_and_parse?

ответ

0

Каналы (сайты, к которым вы обращаетесь) могут, но не обязательно, поддерживать одно или два поля, которые определяют, были ли они изменены с момента последнего доступа. Это etag и последнее изменение. Если сайт поддерживает один или оба из них, они будут возвращены вам при доступе к фиду. Ваша модель должна поддерживать эти поля для каждого интересующего продукта. Feedzirra :: Feed.update использует их, чтобы определить, обновлялся ли фид с момента последнего доступа. Это позволит Feedzirra :: Feed.update извлекать записи, новые или измененные с момента последнего доступа.

Если у вас нет ни этага, ни последних измененных полей, либо потому, что это ваш первый доступ, либо потому, что сайт не предоставляет их, то Feedzirra :: Feed.fetch_and_parse извлекает все записи, доступные с сайта. Это имеет смысл для первого доступа. Это не имеет смысла для последующих обращений, но если сайт не поддерживает его, что вы можете сделать?

Чтобы быть ясным, Feedzirra :: Feed.fetch_and_parse всегда тянет все доступные записи. Feedzirra :: Feed.update извлекает только те записи, которые являются новыми или изменены с даты, указанной в этом документе и/или последней измененной датой.

Записи также содержат обновленную/опубликованную дату.