<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Md6 &#187; feedtools</title>
	<atom:link href="http://md6.org/tag/feedtools/feed" rel="self" type="application/rss+xml" />
	<link>http://md6.org</link>
	<description>Blog</description>
	<lastBuildDate>Sun, 28 Mar 2010 08:24:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>RSS cache za pomocą FeedTools</title>
		<link>http://md6.org/rss-cache-za-pomoc-feedtools</link>
		<comments>http://md6.org/rss-cache-za-pomoc-feedtools#comments</comments>
		<pubDate>Sat, 09 Feb 2008 01:34:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[feedtools]]></category>
		<category><![CDATA[rss]]></category>

		<guid isPermaLink="false">http://127.0.0.1:3000/27-feedtools-rss-atom-cache.html</guid>
		<description><![CDATA[FeedTools &#8211; pobieranie, parsowanie i cache dla Twoich feed&#243;w!
Obs&#322;uga rss&#243;w w Twojej aplikacji railsowej jeszcze nigdy nie by&#322;a tak prosta!
 &#8220;FeedTools&#8221;:http://sporkmonger.com/projects/feedtools/ jest bibliotek&#261; do obs&#322;ugi format&#243;w rss, atom.
Kilka linijek kodu i mamy napisan&#261; ob&#322;ug&#281; rss&#243;w z cachowaniem w naszej railsowej aplikacji.
Instalacja: 

	gem install feedtools

Po zainstalowaniu gema mamy dost&#281;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
  [...]]]></description>
			<content:encoded><![CDATA[<p>FeedTools &#8211; pobieranie, parsowanie i cache dla Twoich feed&#243;w!</p>
<p>Obs&#322;uga rss&#243;w w Twojej aplikacji railsowej jeszcze nigdy nie by&#322;a tak prosta!<br />
 &#8220;FeedTools&#8221;:http://sporkmonger.com/projects/feedtools/ jest bibliotek&#261; do obs&#322;ugi format&#243;w rss, atom.</p>
<p>Kilka linijek kodu i mamy napisan&#261; ob&#322;ug&#281; rss&#243;w z cachowaniem w naszej railsowej aplikacji.</p>
<p>Instalacja: </p>
<pre>
	gem install feedtools
</pre>
<p>Po zainstalowaniu gema mamy dost&#281;pny plik migracji:</p>
<pre>
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
</pre>
<p>Wcielamy w &#380;ycie migracje:</p>
<pre>
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) ===================================
</pre>
<p>Railsowa konsola:</p>
<pre>
oki@nil:~/tmp/rails_app$./script/console
Loading development environment (Rails 2.0.2) <img src='http://md6.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
>> require 'feed_tools'
=> ["FEED_TOOLS_NAMESPACES", "FEED_TOOLS_ENV"]
>> wykop = FeedTools::Feed.open('http://www.wykop.pl/rss/index.xml')
=> #<feedTools::Feed:0x1a2f228 URL:http://www.wykop.pl/rss/index.xml>
>> wykop.title
=> "Wykop.pl - Strona G&#322;&#243;wna"
>> wykop.link
=> "http://www.wykop.pl/"
>> wykop.description
=> "Wykop - serwis tworzony przez u&#380;ytkownikow"
>> wykop.items.length
=> 25
>> item = wykop.items.first
=> #<feedTools::FeedItem:0x190dc32 LINK:http://www.wykop.pl/link/44825/taniejtankuj-pl-ogolnopolska-akcja-protestacyjna>
>> item.title
=> "TaniejTankuj.pl - Og&#243;lnopolska akcja protestacyjna!"
>> item.link
=> "http://www.wykop.pl/link/44825/taniejtankuj-pl-ogolnopolska-akcja-protestacyjna"
</pre>
<p>Dokumentacja do klasy "FeedTools::FeedItem":http://feedtools.rubyforge.org/classes/FeedTools/FeedItem.html</p>
<p>No dobrze, ale co z tym cachowaniem?</p>
<p>W&#322;&#261;czamy? W&#322;&#261;czamy!</p>
<pre>
>> FeedTools.configurations[:feed_cache] = "FeedTools::DatabaseFeedCache"
=> "FeedTools::DatabaseFeedCache"
>> wykop = FeedTools::Feed.open('http://www.wykop.pl/rss/index.xml')
=> #<feedTools::Feed:0x1a28996 URL: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
=> #<feedTools::Feed:0x19ab37e URL:http://www.wykop.pl/rss/index.xml>
>> wykop.live?	# tym razem z cache (http://feedtools.rubyforge.org/classes/FeedTools/Feed.html#M000315)
=> false
</pre>
<p>Kiedy ostatnio pobrali&#347;my feeda z sieci?</p>
<pre>
>> 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
</pre>
<p>Kilka przydatnych metod:</p>
<pre>
>> wykop.expire!
=> true
>> wykop.expired?
=> true
>> wykop.last_retrieved
=> Wed Dec 31 23:00:00 UTC 1969
</pre>
<p>Po r&#281;cznej deaktualizacji feeda mo&#380;emy ponownie pobrac go z sieci:</p>
<pre>
>> wykop = FeedTools::Feed.open('http://www.wykop.pl/rss/index.xml')
>> wykop.live?
=> true		# swie&#380;utki
</pre>
<p>Konfiguracje odbywa sie poprzez modyfikacje hasha *FeedTools.configurations*</p>
<pre>
>> pp FeedTools.configurations
</pre>
<p>W dokumentacji nie ma za wiele o opcjach konfiguracyjnych. </p>
<p>Dlatego je&#380;eli co&#347; nie jest jasne zerkamy do kodu <img src='http://md6.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>*/usr/local/lib/ruby/gems/1.8/gems/feedtools-0.2.27/lib/feed_tools/lib*</p>
<p>Oraz testy z ktorych mo&#380;na si&#281; wiele dowiedzie&#263;.</p>
<p>*/usr/local/lib/ruby/gems/1.8/gems/feedtools-0.2.27/test/unit*</p>
<p>Na koniec kilka link&#243;w:<br />
* "FeedTools - strona projektu":http://sporkmonger.com/projects/feedtools/<br />
* "FeedTools dokumentacja":http://feedtools.rubyforge.org/classes/FeedTools.html<br />
* "Tutorial":http://sporkmonger.com/2005/08/11/tutorial</p>
<p>Jak generowa&#263; rssy w Ruby on Rails:<br />
* "Creating an RSS feed in Ruby on Rails":http://paulsturgess.co.uk/articles/show/13-creating-an-rss-feed-in-ruby-on-rails<br />
* Screencast "Generating RSS Feeds":http://railscasts.com/episodes/87 (6:06) - generowanie rss&#243;w w rails-2.0, wykorzystanie routes.</p>
]]></content:encoded>
			<wfw:commentRss>http://md6.org/rss-cache-za-pomoc-feedtools/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
