Monthly Archives: October 2008

Read third party HTML using Ruby on Rails and Hpricot

A few weeks ago, mi Distributed Systems class profesor asked us to implement some sort of Web Service that gave Currency Rates information in XML format. This looked pretty easy, but all went wrong when he asked us to read the HTML from a bank’s web site and retrieve the information from there.
The idea then was to read that HTML code from a reliable site, transform it and make it available for us to download or use. Looking for a free web service that presented this information and using it wouldnt have been as easy as it was for me to use Hpricot. So here is the code I wrote, I just changed the url from where i fetched the information, because I don’t know if it is legal to do that :D.

First there is the model CurrencyService
currency_service.rb
require ‘open-uri’
require ‘hpricot’

class CurrencyService “”},
{:CUR_CODE => “USD”, :MEX_EQV => get_data(”#FIX_DATA”).gsub(/ /,”).chomp},
{:CURRENCY_EQV => “”},
{:CUR_CODE => “EUR”, :MEX_EQV => get_data(”#EURO_DATA”).gsub(/ /,”).chomp},
{:CURRENCY_EQV => “”},
{:CUR_CODE => “YEN”, :MEX_EQV => get_data(”#YEN_DATA”).gsub(/ /,”).chomp},
{:CURRENCY_EQV => “”},
{:CUR_CODE => “CAN”, :MEX_EQV => get_data(”#LIBRA_DATA”).gsub(/ /,”).chomp}
}.to_xml
end

end

And then the controller

curency_service_controller.rb
class CurrencyServiceController “text/xml”,
:filename => “currencies.xml” )
end

end

Enjoy

Leer HTML de un sitio externo con Ruby on Rails y Hpricot

Hace un par de semanas mi profesor de Sistemas Distribuidos en el ITESO nos pidió hacer una especie de Web Service que te entregara información del mercado cambiaro en formato XML. Esto sonaba bastante sencillo, sin embargo todo se complicó cuando nos pidio información real tomada de la página de un banco, debiamos leerla en HTML.
La idea entonces era leer el código HTML de una página web confiable que presentara esta información y nosotros convertirla en XML con el formato solicitado. Al principio si le batalle en buscar mejor un Web Service ya hecho y gratuito que presentara esta información, sólo encontre uno aqui, sin embargo no pude encontrar un API ni nada parecido que me facilitara el uso.
Para este momento ya tenia el tiempo encima así que como de costumbre acudí a la comunidad de RoR para ver que herramientas tenía a la mano para leer HTML. Me encontré con Hpricot que es un gem que me solucionó la vida. La solución final quedo muy simple.

Primero hize un modelo CurrencyService que se conecta con el sitio web del que obtuve la información, lo lee como un string y este lo convierte a un Hpricot, después usando la librería Hpricot busca por ID los datos que se necesitan, el controlador simplemente presenta la información en formato XML y listo. Aqui dejo el código, solo que no revelaré la fuente de información ya que no se si es legal.

currency_service.rb
require ‘open-uri’
require ‘hpricot’

class CurrencyService < ActiveRecord::Base
def get_data(id)
html = Hpricot(open("http://www.urlfalso.fake").read)
return (html/id).inner_html
end

def get_xml_content
@currencies = {
{:CURRENCY_EQV => ""},
{:CUR_CODE => "USD", :MEX_EQV => get_data("#FIX_DATO").gsub(/ /,'').chomp},
{:CURRENCY_EQV => ""},
{:CUR_CODE => "EUR", :MEX_EQV => get_data("#EURO_DATO").gsub(/ /,'').chomp},
{:CURRENCY_EQV => ""},
{:CUR_CODE => "YEN", :MEX_EQV => get_data("#YEN_DATO").gsub(/ /,'').chomp},
{:CURRENCY_EQV => ""},
{:CUR_CODE => "CAN", :MEX_EQV => get_data("#LIBRA_DATO").gsub(/ /,'').chomp}
}.to_xml

end

end

curency_service_controller.rb
class CurrencyServiceController < ApplicationController

def index
@currency_service = CurrencyService.new
send_data( @currency_service.get_xml_content, :type => "text/xml",
:filename => "currencies.xml" )
end

end

Asi de simple es…

Fixing problems with MusicBrainz on Amarok( Fingerprinting of .mp3 files is not supported )

So, I’ve been using Amarok for a little while and I found this MusicBrainz tag filler feature, when I tried to use it the damn thing told me this:

:Tunepimp (MusicBrainz tagging library ) returned the following error: “Fingerprinting of .mp3 files is not supported.”

Well the way to fix this is by installing the missing library, wich the message is not refering, but I’ll give you the name: libtunepimp5-mp3. So if you are running Ubuntu simply do:
$ sudo apt-get install libtunepimp5-mp3
And that should leave your MusicBrainz tag fetcher completely functional, just restart Amarok after installing the library.
Enjoy.

Problemas con MusicBrainz en Amarok( Fingerprinting of .mp3 files is not supported )

Llevo algun tiempo usando Amarok en mi Linux Ubuntu para escuchar y administrar mi música. Vi que tiene como “feature” llenar los “tags” de tu archivo por medio de MusicBrainz, sin embargo me presento este molesto error cuando intete usar dicha opción:

Tunepimp (MusicBrainz tagging library ) returned the following error:
“Fingerprinting of .mp3 files is not supported.”

La causa de este error es la falta de la librería libtunepimp5-mp3, así que si usas Ubuntu simplemente corre:

$ sudo apt-get install libtunepimp5-mp3

Reinicia tu Amarok y listo, con esto debe quedar funcional.