Generar un RSS válido en Rails es muy fácil, con REST es aún más claro, y la respuesta a distintos formatos de Rails 2 lo facilita aún más. Veamos un ejemplo, además especificaremos la mayoría de los atributos soportados por el formato RSS 2.0.
Supongamos, como hemos dicho, que tu aplicación está en Rails 2, cumple los principios REST y tenemos un modelo Article. En el controlador tendremos una acción index que nos dará un listado de todos los artículos. Veamos el código de dicha acción
def index
@articles = Article.find(:all)
respond_to do |format|
format.html # index.html.erb
format.rss { render :rss => @articles }
end
end
Como a muchos de vosotros no os interesará este artículo lo divido por aquí.
Como veis, especificamos los distintos formatos a los que respondería nuestra acción index, por defecto lo haría al HTML renderizando dicha vista (index.html.erb) y en el caso de que requiriéramos el formato RSS se renderizaría la vista index.rss.builder. Aun así, Rails responde al formato RSS si se lo pedimos, sin necesidad de declararlo en el respond_to, por lo tanto nuestra acción index podría quedar así:
def index
@articles = Article.find(:all)
end
Ahora, como hemos dicho, tendremos que crear el archivo index.rss.builder con el siguiente código:
xml.instruct!
ml, :version => "1.0"
xml.rss :version => "2.0" do
xml.channel do
# Parámetros obligatorios del canal RSS
xml.title "Título del canal RSS"
xml.description "Pequeña descripción del canal"
xml.link formatted_articles_url(:rss) # Más abajo explicaremos esto
# Parámetros opcionales del canal RSS
xml.language "Lenguaje del RSS, ejemplo: es-ES"
xml.copyright "Tipo de licencia. Ejemplo: Creative Commons"
xml.image do # Aquí podremos asociar una imágen al canal
xml.url "URL de la imágen JPG, GIF o PNG"
xml.title "Título de la imágen, corresponde con el atributo HTML alt"
xml.link "Enlace de la imágen"
end
# Parámetros de cada elemento item del canal RSS
for article in @articles # Recorremos los artículos
xml.item do
xml.title article.title # Título
xml.link article_url(article) # Enlace permanente al artículo
xml.description article.body # El texto/cuerpo del artículo
xml.author article.user.email # Correo electrónico y/o pseudónimo del autor
# Categoría, pueden haber varios elementos xml.category
xml.category article.category.name
xml.comments article_url(article) # URL para comentar
xml.guid article_url(article) # URL única al artículo
# Fecha de publicación según la norma RFC 822
xml.pubDate article.created_at.to_s(:rfc822)
end
end
end
end
Esto nos daría un archivo RSS completo y válido, hay algunos atributos de los que podemos prescindir tanto en el elemento channel como en item y hay otros tantos que podéis añadir (ver especificación del RSS 2.0).
Nos queda un último apunte, ¿cómo llamamos a la URL del RSS según REST? muy fácil, si habéis prestado atención al código os habréis dando cuenta:
< %= link_to 'Enlace al RSS de artículos', formatted_articles_url(:rss) %>
Esto es todo, ya tenemos sindicación RSS en nuestra aplicación. Tambien podemos usar Atom Feed Helper para generar feeds (en este caso Atom).