Criando RSS com Rails

Nota: antes do artigo vale lembrar do curso online de Ruby on Rails + Flex do Carlos. Ele já fez alguns experimentos com esses dois ambientes e rolou um resultado bacana. Vamos ao artigo então :P

Não sou o maior especialista em padrões de distribuição de conteúdo. Existe gente melhor para isso, mas em um projeto meu, precisei da criação de feeds. O primeiro passo é mapear o arquivos routes.rb (config/routes.rb) do seu projeto.

map.resources :articles, :collections => {:rss => :get}

Esse mapeamento vai permitir que você tenha o seguinte endereço: www.meusite.com/articles/rss. Feito isso, abra seu controller (products_controller.rb) e adicione o método RSS, que buscará os últimos registros do banco.

def rss
  @articles = Article.find(:all, :limit => 10, :order => 'created_at DESC')
  render :layout => false
end

Observe o “render :layout => false”. Ele evita que o layout seja carregado, que não será necessário no seu feed. Feito isso, é necessário a criação da view. Na pasta view, crie o arquivo rss.rxhml.

xml.instruct! :xml, :version=>"1.0"
xml.rss(:version=>"2.0"){
  xml.channel{
    xml.title("Meu site")
    xml.link("http://www.meusite.com/")
    xml.description("Esse é meu site!")
    xml.language('en-uk')
      for article in @articles
        xml.item do
          xml.title(article.title)
          xml.description(article.body)     
          xml.author("[email protected]")               
          xml.pubDate(article.created_at.strftime("%a, %d %b %Y %H:%M:%S %z"))
          xml.link(article_url(article))
          xml.guid(article_url(article))
        end
      end
  }
}

Esse é um modelo básico. Algumas aulinhas sobre o padrão podem garantir mais diversão. Algo a mais que você pode fazer é disponibilizar o endereço do feed na tag , para gerar um ícone na barra de endereços alertando a existência do feed. Geralmente, as pessoas o fazem manualmente, assim:

<link href="http://www.meusite.com/products/rss" rel="alternate" title="RSS" type="application/rss+xml" />

Mas com Rails, basta adicionar a seguinte linha, que gerará a linha acima dinamicamente.

< %= auto_discovery_link_tag(:rss, :controller => 'articles', :action => 'rss') %>

Nota: também existe um plugin para isso.

 

Leonardo

Registros de Leonardo Faria sobre desenvolvimento web