counter easy hit

Archive for the 'RoR' Category

Leer feeds RSS [0.92][1.0][2.0] y Atom 1.0 en Rails

Wednesday, March 14th, 2007

Aquí va mi primera contribución con la comunidad Rails.

En el proyecto que estoy creando necesitaba una libreria que leyera feeds ya que los usuarios pueden pueden indicar su blog para que aparezcan las 10 últimas entradas en su perfil.

He visto que internament, Ruby da soporte a RSS 0.92, 1.0 y 2.0, pero no lo hace bien. Ciertos campos de los posts los ignora y no se pueden recuperar y además no habia soporte para Atom.

Así que aquí está la libreria que permite obtener un hash con la info de los posts del feed. Solo teneis que insertarla en la carpeta /lib/, declararla en environment.rb con

require ‘rssReader’

Libreria:

require ‘rexml/document’
class RssReader

#**************************************************************************
# -PARAMs: url feed
# url accepts feed’s:
# RSS 0.92
# RSS 1.0
# RSS 2.0
# Atom
#
# -OUTPUT: Hash
# [’title’] –> blog’s title
# [’link’] —> blog’s link
# [’description’] –> blog’s description
# [’rss_url’] –> feed’s url
# [’items’] –> array of posts
#    [’title’] –> post’s title
#    [’link’] –> post’s link
#    [’description’] –> summary of post
#    [’content’] –> content of post
#    [’author’] –> author of post
#    [’publication_date’] –> publication date post
#
#**************************************************************************
def read_rss(feed_url)
@content = Net::HTTP.get(URI.parse(feed_url))
xml = REXML::Document.new(@content)
data = {}

if !xml.root.elements[’channel/title’].nil?
#TIPO RSS (RSS 0.92 | RSS 1.0 | RSS 2.0)

data[’title’] = xml.root.elements[’channel/title’].text unless !xml.root.elements[’channel/title’]
data[’link’] = format_url(xml.root.elements[’channel/link’].text) unless !xml.root.elements[’channel/link’]
data[’description’] = xml.root.elements[’channel/description’].text unless !xml.root.elements[’channel/description’]
data[’rss_url’] = format_url(feed_url)
data[’items’] = []
xml.elements.each(’//item’) do |item|
it = {}
it[’title’] = item.elements[’title’].text unless !item.elements[’title’]
it[’link’] = format_url(item.elements[’link’].text) unless !item.elements[’link’]
it[’description’] = item.elements[’description’].text unless !item.elements[’description’]
it[’content’] = item.elements[’content:encoded’].text unless !item.elements[’content:encoded’]
it[’author’] = item.elements[’dc:creator’].text unless !item.elements[’dc:creator’]
it[’publication_date’] = item.elements[’dc:date’].text unless !item.elements[’dc:date’]
it[’publication_date’] = item.elements[’pubDate’].text unless !item.elements[’pubDate’]
data[’items’] < < it
end
elsif !xml.elements['/feed/title'].nil?
#TIPO ATOM
data['title'] = xml.elements['/feed/title'].text unless !xml.elements['/feed/title']
data['link'] = xml.elements['/feed/link'].text unless !xml.elements['/feed/link']
data['description'] = xml.elements['/feed/tagline'].text unless !xml.elements['/feed/tagline']
data['rss_url'] = feed_url
data['items'] = []

xml.elements.each('//entry') do |item|
it = {}
it['title'] = item.elements['title'].text unless !item.elements['title']
it['link'] = item.elements['link'].text unless !item.elements['link']
it['description'] = item.elements['summary'].text unless !item.elements['summary']
it['content'] = item.elements['content'].text unless !item.elements['content']
it['author'] = item.elements['author/name'].text unless !item.elements['author/name']
it['publication_date'] = item.elements['issued'].text unless !item.elements['issued']
data['items'] << it
end
end

return data
end

#****************************************************************
# -PARAMs url
#
# -OUTPUT clean url with "http://" protocol inserted
#
#****************************************************************
def format_url(url)
if !url.nil?
"http://" + url.downcase.gsub("http://","")
end
end

end

El problema de Ruby On Rails - RoR

Thursday, December 14th, 2006

El problema de este framework, almenos el problema que encuentro yo, es que hay que saber ruby. Me encuentro programando, intentando aprender la filosofia de Rails pero según lo que quiera hacer, no me sé la syntaxis que usan ciertas instrucciones y nada, toca coger el libro, busca la información, entiendela porque te puedes encontrar 4 o 5 maneras de hacer lo mismo… bla bla bla Nada y al final pierdes el tiempo a lo tonto.

Y encima si tienes la memoria como la mia, que me cuesta memorizar cosas, pues se complica más. Esta tarde estuve bloqueado con una tonteria. ¿Como divides en Ruby? Pues como en todos los lenguages no? esa es la teoria, pero no me lo hacia. Yo flipaba. Buscas info en el libro, internet. Y nada. Y al final te das cuenta que el fallo no es de la syntaxis sino de otra cosa que habia antes…. y que no sé porque ruby no avisaba del error. EJEM!!

Mucho ruby, mucho rails, mucho php, mucho todo….. pero al final pasa como en todos los idiomas, que hay problemas chorras (evidentes cuando lo encuentras) que te amargan la existència.

En consuelo es que con tanto investigar al final aprendes otras cosas que van complementando tus conocimientos sobre el framework de RoR. Suerte, porque sino apaga y vamonos. Eso si, el código va quedando bastante limpito, con poquisimas líneas :D, nada que ver con la burrada del PHP

Aquí están el número total de lineas que llevo. Me quedo sorprendido que con tan pocas lineas pueda tener lo que tengo hecho hasta ahora.

Pantallazo-2.png