[Ror-es] Añadiendo datos automáticamente
Imobach González Sosa
imobachgs at banot.net
Sat Dec 30 09:07:30 GMT 2006
El Sábado, 30 de Diciembre de 2006 01:44, Coquito Zen escribió:
> Buenas noches a todos!
>
> Llevo un rato probando y probando, y ni San Google ni los cientos de
> cafés que he tomado ya, me han hecho encontrar la solución a estre
> problema que tengo delante. Si alguno pudiera aconsejarme con lo que
> hacer, estaría eternamente agradecido.
>
> La cuestión es la siguiente, tengo un pequeño codigo que coje los datos
> de un RSS y los presenta en pantalla (un muy simple lector RSS). La
> cuestión es que me gustaría que automáticamente cada cierto tiempo, o
> almenos cada vez que accediera al action, tomara los datos del RSS
> (título y contenido) y los agregara a la base de datos, exactamente a la
> tabla news (id, title, content).
>
> El codigo del lector es el siguiente:
>
> def index
> feed_url = 'http://rss.elmundo.es/rss/descarga.htm?data2=4'
> output = "<h1>My RSS Reader</h1>"
> open(feed_url) do |http|
> response = http.read
> result = RSS::Parser.parse(response, false)
> result.output_encoding = "iso-8859-1"
> output += "Feed Title: #{result.channel.title}<br />"
> result.items.each_with_index do |item, i|
> output += "<p><b>#{i+1}. #{item.title}</b><br
> />#{item.description}<p>" if i < 10
> end
> end
> render_text output
> end
>
> Supongo que para hacerlo, es tomar las strings de item.title y de
> item.description de cada post y irlas guardando progresivamente. Lo que
> sucede con esto, es que no se como aplicarlo, ahora mismo tengo un
> enorme "cacao" en la cabeza que no me deja ni razonar.
No conozco el resto de tu aplicación, así que la solución que se me ocurre a
lo mejor no la puedes llevar a cabo en tu caso. Pero bueno, espero que te
sirva.
Yo empezaría por crear un par de modelos Feed y FeedItem (que supongo que tú
ya tienes algo parecido). El primero representa una fuente RSS (un feed) y el
segundo cada elemento que podamos leer.
El siguiente paso sería simplificar el controlador, quitando el código
referente a la lectura de los RSS. ¿Dónde lo ponemos? Pues siguiendo la
propuesta[1] de Jamis Buck y Michael Koziarsky, podríamos crear una clase
FeedImporter (que pondríamos en lib/). Así, el modelo Feed sería algo como:
class Feed < ActiveRecord::Base
has_many :feed_items
def import!
FeedImporter.import!(self)
end
end
La clase FeedImporter se encargará de instanciar los nuevos FeedItem según sea
necesario. Si quieres, puedes prescindir de esta clase (FeedImporter) e
implementar esta funcionalidad en Feed, pero el enfoque de Koziarsky y Jamis
hace que tus modelos permanezcan simples.
En cuanto al controlador, podrías hacer algo como:
app/controllers/feed_controller.rb
def view_feed
@feed = Feed.find(params[:id])
@feed.import!
@items = feed.items
end
Y en la vista, sólo tienes que recorrer los elementos (@items):
app/feeds/view_feed.rhtml:
<%= render :partial => "item", :collection => @items %>
app/feeds/_item.rhtml
<%=h item.title %>
<%=h item.body %>
> Gracias a todos por la ayuda y el tiempo que podais tomar al leer esto.
Espero que te haya servido de algo.
> Saludos,
Un saludo.
[1] http://www.therailsway.com/2006/12/18/importing-files
--
_o) Imobach González Sosa
//\ email: imobachgs at banot dot net
V_/_ jid: osoh at jabberes dot org
url: http://www.banot.net/~osoh/
blog: http://devnull.blogs.banot.net
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.simplelogica.net/pipermail/ror-es/attachments/20061230/4782e438/attachment.pgp
More information about the Ror-es
mailing list