
Conhece o método atom_feed? Ele é uma novidade no Rails 2.0, que facilitou muito a criação de feeds Atom. Veja um exemplo de uso:
Em um arquivo index.atom.builder:
atom_feed do |feed|
feed.title("Nome do Jogo")
feed.updated((@posts.first.created_at))
for post in @posts
feed.entry(post) do |entry|
entry.title(post.title)
entry.content(post.body, :type => 'html')
entry.author do |author|
author.name("Carlos Brando")
end
end
end
end
Mas, o que é um atom feed?
Hmm… ok, tem bastante gente nova na área lendo este blog, então é melhor explicar o que é um Atom Feed.
Atom é o nome de um estilo baseado em XML e meta data. Em outras palavras é um protocolo quer serve para publicar conteúdo na internet que é sempre atualizado, como este blog, por exemplo. Os feeds sempre são publicados em XML e no caso do Atom Feed ele é identificado como application/atom+xml media type.
Se mesmo assim você não entendeu, clique aqui para ver o que é um feed. Neste caso é um RSS Feed, mas é quase a mesma coisa. Quase, porque o Atom é um pouco mais sofisticado que o RSS.
Ok, entendi, e o que tem de novo neste método?
Vamos lá…
Atualmente este método aceita como parâmetros as opções :language, :root_url e :url, para mais informações sobre este método clique aqui. Mas com a alteração realizada agora podemos incluir novos namespaces ao elemento root do feed. Por exemplo, se fizermos assim:
atom_feed('xmlns:app' => 'http://www.w3.org/2007/app') do |feed|
Ele retornará isto:
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app">
Adaptando o exemplo anterior, poderíamos usá-lo assim:
atom_feed({'xmlns:app' => 'http://www.w3.org/2007/app',
'xmlns:openSearch' => 'http://a9.com/-/spec/opensearch/1.1/'}) do |feed|
feed.title("Nome do Jogo")
feed.updated((@posts.first.created_at))
feed.tag!(openSearch:totalResults, 10)
for post in @posts
feed.entry(post) do |entry|
entry.title(post.title)
entry.content(post.body, :type => 'html')
entry.tag!('app:edited', Time.now)
entry.author do |author|
author.name("Carlos Brando")
end
end
end
end
Isso realmente facilita muito em um sistema que usa muitos feeds como o que vamos fazer agora. Ótima dica!
Muito bom Carlos.
Uma nota pessoal: adiciona essa feature no http://www.rubyonrails.pro.br/podcasts!