RSS cache za pomocą FeedTools

FeedTools – pobieranie, parsowanie i cache dla Twoich feedów!

Obsługa rssów w Twojej aplikacji railsowej jeszcze nigdy nie była tak prosta!
“FeedTools”:http://sporkmonger.com/projects/feedtools/ jest biblioteką do obsługi formatów rss, atom.

Kilka linijek kodu i mamy napisaną obługę rssów z cachowaniem w naszej railsowej aplikacji.

Instalacja:

	gem install feedtools

Po zainstalowaniu gema mamy dostępny plik migracji:

oki@nil:~$cat /usr/local/lib/ruby/gems/1.8/gems/feedtools-0.2.27/db/migration.rb
class AddFeedToolsTables < ActiveRecord::Migration
  def self.up
    puts "Adding cached feeds table..."
    create_table :cached_feeds do |t|
      t.column :href, :string
      t.column :title, :string
      t.column :link, :string
      t.column :feed_data, :text
      t.column :feed_data_type, :string
      t.column :http_headers, :text
      t.column :last_retrieved, :datetime
      t.column :time_to_live, :integer
      t.column :serialized, :text
    end
  end

  def self.down
    puts "Dropping cached feeds table..."
    drop_table :cached_feeds
  end
end

Wcielamy w życie migracje:

oki@nil:~/rails/rails_app$./script/generate migrate add_feed_tools_tables
      exists  db/migrate
      create  db/migrate/002_add_feed_tools_tables.rb
oki@nil:~/rails/rails_app$cat /usr/local/lib/ruby/gems/1.8/gems/feedtools-0.2.27/db/migration.rb  > db/migrate/002_add_feed_tools_tables.rb
oki@nil:~/rails/rails_ap_$rake db:migrate
== 2 AddFeedToolsTables: migrating ============================================
Adding cached feeds table...
-- create_table(:cached_feeds)
   -> 0.0361s
== 2 AddFeedToolsTables: migrated (0.0363s) ===================================

Railsowa konsola:

oki@nil:~/tmp/rails_app$./script/console
Loading development environment (Rails 2.0.2) :)
>> require 'feed_tools'
=> ["FEED_TOOLS_NAMESPACES", "FEED_TOOLS_ENV"]
>> wykop = FeedTools::Feed.open('http://www.wykop.pl/rss/index.xml')
=> #
>> wykop.title
=> "Wykop.pl - Strona Główna"
>> wykop.link
=> "http://www.wykop.pl/"
>> wykop.description
=> "Wykop - serwis tworzony przez użytkownikow"
>> wykop.items.length
=> 25
>> item = wykop.items.first
=> #
>> item.title
=> "TaniejTankuj.pl - Ogólnopolska akcja protestacyjna!"
>> item.link
=> "http://www.wykop.pl/link/44825/taniejtankuj-pl-ogolnopolska-akcja-protestacyjna"

Dokumentacja do klasy "FeedTools::FeedItem":http://feedtools.rubyforge.org/classes/FeedTools/FeedItem.html

No dobrze, ale co z tym cachowaniem?

Włączamy? Włączamy!

>> FeedTools.configurations[:feed_cache] = "FeedTools::DatabaseFeedCache"
=> "FeedTools::DatabaseFeedCache"
>> wykop = FeedTools::Feed.open('http://www.wykop.pl/rss/index.xml')
=> #
>> wykop.live?	# prawda jezeli feed nie byl pobrany z cache
=> true
>> wykop = FeedTools::Feed.open('http://www.wykop.pl/rss/index.xml')	# pobieramy jeszcze raz
=> #
>> wykop.live?	# tym razem z cache (http://feedtools.rubyforge.org/classes/FeedTools/Feed.html#M000315)
=> false

Kiedy ostatnio pobraliśmy feeda z sieci?

>> wykop.last_retrieved
=> Sat Feb 09 00:34:50 UTC 2008
>> Time.now.utc
=> Sat Feb 09 00:40:21 UTC 2008
>> wykop.time_to_live	# tutaj mamy czas zycia feeda w sekundach
=> 3600

Kilka przydatnych metod:

>> wykop.expire!
=> true
>> wykop.expired?
=> true
>> wykop.last_retrieved
=> Wed Dec 31 23:00:00 UTC 1969

Po ręcznej deaktualizacji feeda możemy ponownie pobrac go z sieci:

>> wykop = FeedTools::Feed.open('http://www.wykop.pl/rss/index.xml')
>> wykop.live?
=> true		# swieżutki

Konfiguracje odbywa sie poprzez modyfikacje hasha *FeedTools.configurations*

>> pp FeedTools.configurations

W dokumentacji nie ma za wiele o opcjach konfiguracyjnych.

Dlatego jeżeli coś nie jest jasne zerkamy do kodu :)

*/usr/local/lib/ruby/gems/1.8/gems/feedtools-0.2.27/lib/feed_tools/lib*

Oraz testy z ktorych można się wiele dowiedzieć.

*/usr/local/lib/ruby/gems/1.8/gems/feedtools-0.2.27/test/unit*

Na koniec kilka linków:
* "FeedTools - strona projektu":http://sporkmonger.com/projects/feedtools/
* "FeedTools dokumentacja":http://feedtools.rubyforge.org/classes/FeedTools.html
* "Tutorial":http://sporkmonger.com/2005/08/11/tutorial

Jak generować rssy w Ruby on Rails:
* "Creating an RSS feed in Ruby on Rails":http://paulsturgess.co.uk/articles/show/13-creating-an-rss-feed-in-ruby-on-rails
* Screencast "Generating RSS Feeds":http://railscasts.com/episodes/87 (6:06) - generowanie rssów w rails-2.0, wykorzystanie routes.

Tags: ,

Comments are closed.