Parseando un feed

Hace como una hora que llegué a mi casa, me bañe y me puse a buscar algo para hacer con Python. Le pregunté a perrito666 sobre el facundario, ya que había estado teniendo algunos problemas. Y me dijo que todavía no lo había visto, asique seguí buscando otra cosa.

Me acordé que mi amigo personal, aunque desconocido, Leo (leo_rockaway… ups perdón leo_rockway) estaba buscando un feed que le informara como era el cambio entre una moneda a otra de forma actualizada. Hacía algún tiempo que estaba buscando eso, pero hacía unos días me había comentado que lo había encontrado. Busqué en los logs de las conversaciones y no encontré la dirección asique busqué en Google: “currency feed” y era el primer link, lo que me hizo pensar que fue bastante vago para buscar este pibe.

Como nunca había parseado un archivo de feed, ni sabía que tan complicado era, o que tan fácil, me puse a ver qué podía hacer. Hacía un tiempo que yo le había recomendado a Leo el módulo feedparser de Python, aunque nunca lo había utilizado.

Lo primero que hice fue fijarme si lo tenía instalado. Como lo tenía, me leí la documentación de ejemplo que hay en esa página web y me fue suficiente para hacer lo que Leo necesitaba. Busqué cómo estaban ordenados los cambios del feed de pesos argentinos a alguna otra moneda, el que me interesaba era el cambio con respecto a dólares estadounidenses. Éste aparecía en la antepenúltima ubicación.

Con un par de líneas me dí cuenta que obtenía lo que quería. No puedo dejar de sorprenderme con Python, no puede ser todo tan fácil. ¿O yo soy muy inteligente?🙂 [1]

>>> import feedparser
>>> import re
>>> rss = 'http://currencysource.com/RSS/ARS.xml'
>>> feed = feedparser.parse(rss)
>>> title = feed['entries'][-3]['title']
>>> title
u'1 ARS = USD (0.331388)'
>>> regex = re.compile('(.+)')
>>> result = regex.search(title)
>>> result
<_sre.SRE_Match object at 0xcc9510>
>>> title[result.start():result.end()]
u'(0.331388)'
>>> title[result.start()+1:result.end()-1]
u'0.331388'
>>>

Y ahí sale andando fácil ahora Leo. Ya tenés la equivalencia que necesitabas. Espero que te sirva de algo. Podés encarar tu problema de varias forma ahora, esto era lo más fácil de hacer, por eso lo hice yo…😉

[1] no lo creo, después se me complicó con la expresión regular y era una boludés.

6 pensamientos en “Parseando un feed

  1. Matías dice:

    humitos: si vas a usar la expresión regular sólo una vez, no hace falta que la compiles. El módulo la compila automáticamente antes de usarla; la compilación “manual” es una optimización cuando vas a usar la misma expresión muchas veces.

    También podés usar una expresión modificada “\((?P.+)\)” y después sacar el resultado directamente de result.group(‘cambio’)😉

  2. Matías dice:

    corrección: la expresión modificada tiene que ser “\((?P.+)\)”

  3. Matías dice:

    jajaja… el comentario me filtra lo que hay adentro creyendo que es un tag.

    "\((?P.+)\)" ¿ahora sí se ve bien?

  4. Matías dice:

    AHHHHGGGG!!!! la última vez que intento:

    "\((?P<cambio>.+)\)";

  5. Hola humitos!

    Guarda con la “actualidad” de los datos de currencysource.com. Si me meto en la página principal y hago una conversión de 1 USD a ARS, me da que 1 U$S = 3,01760 ARS (?).

    Joya el feedparser.🙂

    Saludos
    Marcelo

  6. Leo dice:

    @Marcelo:
    En realidad el feed es para mi y hasta ahora no pude encontrar otro feed de monedas gratuito. Por el momento voy a hacer el programa basado en esta pagina y despues en todo caso adaptar el programa no seria complicado. Gracias por el dato igual, voy a seguir buscando a ver si encuentro un feed mejor.

    Saludos,
    Leo

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: