Estoy buscando un patrón de mejores prácticas/estándar para generar feeds en Rails 3. ¿Sigue siendo válido el http://railscasts.com/episodes/87-generating-rss-feeds?Generación de feed RSS en Rails 3
Respuesta
Antes que nada, hoy en día Recomiendo usar un feed ATOM en lugar de RSS.
La especificación de alimentación ATOM ofrece más valor que el RSS con internacionalización, tipos de contenido y otras cosas y cada lector de alimentación moderna lo admite.
Más información sobre ATOM vs RSS se puede encontrar en:
- los Wikipedia ATOM entry
- PRO Blogger y Free Marketing Zone Artículos sobre el tema
En la codificación:
este ejemplo se supone:
- un modelo llamado
NewsItem
con los siguientes atributos:title
content
author_name
- un controlador para que el modelo (
news_items_controller.rb
), a que agregará elfeed
ac
Vamos a utilizar una plantilla de generador para este y el Ruby on Rails atom_feed helper que es de gran utilidad.
1. Añadir la acción al controlador
Ir a app/controllers/news_items_controller.rb
y añadir:
def feed
# this will be the name of the feed displayed on the feed reader
@title = "FEED title"
# the news items
@news_items = NewsItem.order("updated_at desc")
# this will be our Feed's update timestamp
@updated = @news_items.first.updated_at unless @news_items.empty?
respond_to do |format|
format.atom { render :layout => false }
# we want the RSS feed to redirect permanently to the ATOM feed
format.rss { redirect_to feed_path(:format => :atom), :status => :moved_permanently }
end
end
2. Configuración de la plantilla de constructor
Ahora vamos a añadir la plantilla para construir la alimentación.
Ir a app/views/news_items/feed.atom.builder
y añadir:
atom_feed :language => 'en-US' do |feed|
feed.title @title
feed.updated @updated
@news_items.each do |item|
next if item.updated_at.blank?
feed.entry(item) do |entry|
entry.url news_item_url(item)
entry.title item.title
entry.content item.content, :type => 'html'
# the strftime is needed to work with Google Reader.
entry.updated(item.updated_at.strftime("%Y-%m-%dT%H:%M:%SZ"))
entry.author do |author|
author.name entry.author_name
end
end
end
end
3. alambre para arriba con una ruta
Vamos a hacer los feeds disponibles en http://domain.com/feed
Esto llamará a la acción con el átomo formatee por defecto y redireccione /feed.rss
a /feed.atom
.
Ir a config/routes.rb
y añadir:
resources :news_items
match '/feed' => 'news_items#feed',
:as => :feed,
:defaults => { :format => 'atom' }
4. Añada el enlace al átomo y RSS en el diseño
Finalmente, todo lo que queda es añadir la alimentación a la disposición .
Ir a app/views/layouts/application.html.erb
y añadir esta Sección <head></head>
:
<%= auto_discovery_link_tag :atom, "/feed" %>
<%= auto_discovery_link_tag :rss, "/feed.rss" %>
Puede haber un error tipográfico o dos en que, por lo que me haga saber si esto funciona para usted.
Hice algo similar pero sin crear una nueva acción.
index.atom.builder
atom_feed :language => 'en-US' do |feed|
feed.title "Articles"
feed.updated Time.now
@articles.each do |item|
next if item.published_at.blank?
feed.entry(item) do |entry|
entry.url article_url(item)
entry.title item.title
entry.content item.content, :type => 'html'
# the strftime is needed to work with Google Reader.
entry.updated(item.published_at.strftime("%Y-%m-%dT%H:%M:%SZ"))
entry.author item.user.handle
end
end
end
No es necesario hacer nada especial en el controlador a menos que tenga algún código especial como lo hice. Por ejemplo, estoy usando la gema will_paginate y para la alimentación del átomo no quiero paginar, así que hice esto para evitar eso.
controlador
def index
if current_user && current_user.admin?
@articles = Article.paginate :page => params[:page], :order => 'created_at DESC'
else
respond_to do |format|
format.html { @articles = Article.published.paginate :page => params[:page], :order => 'published_at DESC' }
format.atom { @articles = Article.published }
end
end
end
su ejemplo parece bastante sencillo: ¿son solo estos 2 pasos para que la alimentación del átomo funcione o hay más? – ubique
@ubique: Acabo de jugar con esto en uno de mis controladores por curiosidad. Utiliza el nuevo formato de Rail 3, así que todo lo que tuve que hacer fue agregar: átomo a mi respuesta_ a hash - ni siquiera tuve que tocar responder_con. Rails encontró automágicamente el index.atom.builder sin modificaciones adicionales en el controlador. ¡Estoy impresionado de venir de un fondo de PHP! –
¿Qué sucede si quiero mostrar una imagen para el artículo? ¿Cómo paso la entrada de la imagen? – Uchenna
- 1. RSS de ASP.Net feed
- 2. Adición de HTML a mi feed RSS/Atom en Rails
- 3. LINQ to feed RSS?
- 4. TFS checkin RSS feed
- 5. Django RSS Feed Autenticación
- 6. ¿Cómo realizo una alimentación de RSS/Atom en Rails 3?
- 7. LKML mailing list RSS feed?
- 8. Aislamiento de un enlace en RSS Feed
- 9. Rss feed en webview en android
- 10. ¿notificación de envío para RSS Feed?
- 11. ¿Cuántos resultados debería dar en mi feed RSS?
- 12. Analizar el feed RSS utilizando asp.net C#
- 13. lxml - dificultad para analizar stackexchange rss feed
- 14. Analizando Átomo & RSS en Ruby/Rails?
- 15. Django RSS Feed tiene el dominio establecido en example.com
- 16. WordPress: ¿cómo puedo obtener RSS Feed de una sola publicación?
- 17. cargar feedburner feed RSS a través de HTTPS
- 18. ¿Cuál es el formato correcto para pubdate de feed RSS?
- 19. RSS feed: ¿cómo recomendar un intervalo de actualización?
- 20. ¿Cómo leer todos los artículos de un feed RSS?
- 21. RSS feed para los precios del gas y cómo interpretar el feed
- 22. Reddit RSS feed, más que solo los 25 resultados?
- 23. etiquetas namespace prefix y CDATA en la generación de XML para la alimentación de RSS en Ruby on Rails
- 24. ¿Cómo mostrar RSS FEED de otro sitio web en mi sitio en asp.net?
- 25. ¿Cómo puedo visualizar el resultado de un feed rss en formato HTML en un TWebBrowser?
- 26. EJB generación 3 del trozo
- 27. Rails 3 en dreamhost?
- 28. ¿Cómo coloco este feed RSS en una vista de lista jQuery?
- 29. Django-manera de especificar la imagen del canal en RSS feed
- 30. RSS Actualizaciones de artículos
dar crédito donde es debido, se trata de una aplicación que hice y uso basado de esta entrada del blog y sus comentarios: http://lindsaar.net/2010/2/12/how -to-make-an-rss-feed-or-atom-feed-in-rails – tomeduarte
pero ¿por qué agregar una acción totalmente nueva en lugar de simplemente un nuevo formato para decir la acción de índice? – holden
@holden - porque me gusta reutilizar el código y utilizarlo como módulo en varios proyectos. De esta forma, si quiero cambiar algo, es un cambio de una sola vez y no afecta la lógica de acción del índice (por ejemplo, deshabilitar la paginación para el formato de alimentación como lo hizo en su respuesta). Preferencia personal, ambos son igualmente válidos. – tomeduarte