Feeds in Rails October 19, 2007 05:33 over 4 years ago
En ruby dude spurte om jeg havde feed på websiden og svaret var nej, mest på grund af dovenskab. Men jeg måtte jo kigge på det og som så meget andet er det lige til at gå til i rubyonrails.
Mit forudgående kendskab til micro formatter og syndication kan ligge på et noget teoretisk område men det skal ikke forhindre mig at springe ud idet uden at tage særlige hensyn. Først lige en hurtig gennemgang på http://en.wikipedia.org/wiki/Wikipedia:Syndication og så ellers i gang med løsningen.
Man kan downloade en masse plugins men jeg vil hellere gøre det så kiss som overhoved muligt. Jeg vil lave en tynd controller som kan håndtere to requests.
Her er feed controller’en
class FeedController < ApplicationController
def rss
@headers["Content-Type"] = "application/xml"
@posts = Post.find_default
render :layout => false
end
def atom
@headers["Content-Type"] = "application/atom+xml"
@posts = Post.find_default
render :layout => false
end
Derefter to stk views, en til atom og en til rss formatet. Det kunne måske laves på mange andre måder men jeg kan godt li at starte med en løsning som er letforstålig og ligetil. Siden kan jeg altid udskifte og tilføje smartass features.
xml.instruct! :xml, :version=>"1.0"
xml.rss(:version=>"2.0"){
xml.channel{
xml.title(“Frank Vilhelmsen’s Weblog feed”)
xml.link(“http://www.frankvilhelmsen.com”)
xml.description("Frank Vilhelmsen’s Weblog – the professional developer – cut to the bone ")
xml.language(‘da-dk’)
for post in @posts
xml.item do
xml.title(post.title)
xml.description h(truncate(post.body, 300))
- rfc822
- xml.pubDate(post.created_at)
xml.link(“http://blog.frankvilhelmsen.com/blog/show/#{post.id}”)
xml.guid(“http://blog.frankvilhelmsen.com/blog/show/#{post.id}”)
end
end
}
}
xml.instruct! :xml, :version=>'1.0'
xml.feed :xmlns=>'http://www.w3.org/2005/Atom' do
xml.title('Frank Vilhelmsen\'s Weblog')
xml.subtitle('Frank Vilhelmsen\'s Weblog - the professional developer - cut to the bone')
xml.link('href'=>'http://blog.frankvilhelmsen.com/feed/atom', 'rel'=>'self')
xml.link('href'=>'http://blog.frankvilhelmsen.com')
xml.updated Time.now.iso8601
xml.author do
xml.name('Frank Vilhelmsen')
xml.email('fv@frankwilhelmsen.org')
end
xml.id('http://blog.frankvilhelmsen.com/')
for post in @posts
xml.entry do
xml.title post.title
xml.summary h(truncate(post.body, 300)), :type => 'html'
xml.updated post.created_at.iso8601
xml.id url_for(:only_path => false,
:controller => 'blog',
:action => 'show',
:id => post.id)
xml.link("href" => url_for(:only_path => false,
:controller => 'blog',
:action => 'show',
:id => post.id))
end
end
end
Nu mangler jeg kun et tilføre links på selve siden. Dels skal evt. feed services kunne opdage at siden er forstynet med feeds og dels skal man kunne se at det er muligt at abonnere.
<%= auto_discovery_link_tag(:rss, {:controller => "feed", :action => "rss"}) %>
<%= auto_discovery_link_tag(:atom, {:controller => "feed", :action => "atom"}) %>
Så skal der indsættes to orange feed gif’er.
<%= link_to(image_tag("feed.png"), "/feed/rss", :title => "RSS feed") %>
<%= link_to(image_tag("feed.png"), "/feed/atom", :title => "ATOM feed") %>
Feed viser kun de sidste 12 posts, ved ikke om det er hensigtsmæssigt? Jeg ved heller ikke om det er nødvendigt med at formatter evt RedCloth tags i feed’en?
By Frank Vilhelmsen - 1 tag: rails - 2 comments on Feeds in Rails - Add comment
Jørgen Orehøj Erichsen October 19, 2007 05:33 over 4 years ago
Det er jo smukt og enkelt :-)
Susanne Cornelius October 19, 2007 05:33 over 4 years ago
Ja, det er kanon…