Carlos Brando

Nome do Jogo

Edge Rails: Atom Feed turbinado

286440543_052e5d6260.jpg

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

Comments