About
fv_2007
Agile innovative developer with deep insight into lots of platforms, technologies and protocols. Absolute “early adopter” in Web 2.0 technologies and more. Large professional network and eagerly talking about architecture, strategy, design patterns, restful ressources, object-oriented thinking and modeling languages such as PML. Special interest in programminglanguages constructs, knowledge on languages like Smalltalk, Erlang, Java, Clojure, Scala, Ruby... read more
Language

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))

  1. rfc822
  2. 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…