Criando RSS com Rails

12 de abril de 2007 ~ Tags:,

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("contato@meusite.com")               
          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.


Posts relacionados:


4 comentários


Deixe uma resposta






Últimos textos do blog

Tagcloud

abraweb acadêmico actionscript ajax apache apple arteccom asp autosimulado backup benchmark beta bh blogosfera bookmarklet bookmarklets brasil browser censura chucknorris cms codestacker concurso crítica css dashboard deployment desenvolvimento design dicas divinópolis dotmac download dreamhost economia empreendedorismo empreendorismo encontro estatísticas extreme programming feedburner firefox fireworks flash flickr ftp game git globo gmail golive google greasemonkey guerrilha hack host howto htaccess html humor ie inss internet banking iphone ipod is® javascript jquery layout leopard linux listas live locomotive mac meme microsoft miguxês minasonrails mod_rails mp3 msn mysql off tropic opensocial opera orkut oscommerce parser passenger pc personalidade pesquisa php plugin plugins pog portfolio produtividade publicidade rails refurbished regex resenha review ria rss ruby rádio safari sandbox screencast screensaver script.aculo.us seo shoutcast silverlight software spam startup stevejobs suporte swf switch são paulo teste textmate trabalho tumblelog tumblr tutorial twitter ui uml usabilidade validação viral wallop web2.0 webalizer webdesign webdevelopment webkit webmail webmobile webobjects webstandards windows wordpress xml yahoo youtube

Veja todos os textos →