Hoje em dia as informações que podem alimentar um sistema ou website, são de vários formatos e fontes diferentes, exemplo: Sistema de Suporte a Decisão e aplicações Mashup e para demonstrar como isso é simples de se fazer usando Ruby, escrevi o exemplo abaixo baseado no artigo "Scraping IMDB with Ruby and Hpricot".

Neste exemplo, serão extraidas informações sobre Ações do site Google Finance. O exemplo tenta mostrar algumas das maneiras utilizadas para se buscar as informações nas tags das páginas.

O pré-requisito para que a classe funcione é a biblioteca Hpricote, que é um parse HTML baseado na biblioteca HTree e JQuery, porém recodificado em C. A instalação pode ser feita pelo comando:
gem install hpricot

Vamos criar a classe Finance, que ao ser instanciada recebe o endereço da Ação que desejamos extrair as informações:

RUBY:

  1. class Finance
  2.    require 'rubygems'
  3.    require 'hpricot'
  4.    require 'open-uri'
  5.  
  6.    #inicializa as variáveis ao instanciar
  7.    #a classe Finances
  8.    def initialize(url)
  9.       @hp = Hpricot(open(url))
  10.    end
  11. end

Para obter o símbolo da Ação consultada, vamos por exemplo extrair do link conforme a tela abaixo:

Google Finance - Símbolo

Para isso vamos criar o método symbol:

RUBY:

  1. def symbol
  2.    #procura pelas tags <strong><a href="http://www.lednerd.com/">...</a></strong>,
  3.    #extrai o conteúdo e remove os caracteres \n
  4.    @symbol = (@hp/"b/a").inner_text.gsub(/\n/,'')
  5. end

Para obtermos o título da Ação, vamos extrair do cabeçalho H1 conforme tela abaixo:

Google Finance - Título

Para isso vamos criar o método title:

RUBY:

  1. def title
  2.    #procura pelo tag <h1>...</h1>
  3.    #e extrai o conteúdo
  4.    @title = (@hp/"h1").inner_text
  5. end

Para obtermos o índice da Ação, vamos extrair do SPAN conforme tela abaixo:

Google Finance - Índice

Para isso vamos criar o método index:

RUBY:

  1. def index
  2.    #procura pela tag <span class="pr">...</span>
  3.    #e extrai o conteúdo
  4.    @index = @hp.at("span[@class='pr']").inner_text
  5. end

Para extrairmos o valor da variação da Ação, vamos extrair do SPAN conforme tela abaixo:

Google Finance - Variação

Para isso vamos criar o método change:

RUBY:

  1. def change
  2.    #procura pelas tags <strong><span class="chg">...</span></strong>
  3.    #e extrai o conteúdo
  4.    @change = (@hp/"b/span.chg").inner_text
  5. end

Para extrairmos o percentual de variação da Ação, vamos extrair do SPAN conforme tela abaixo:

Google Finance - Percentual de Variação

Para isso vamos criar o método percente_change:

RUBY:

  1. def percente_change
  2.    #extrai o html do <p id="market_data_div">...</p>
  3.    market_data = @hp.search('#market_data_div')
  4.    #procura pelas tags <span class="chg">...</span>
  5.  
  6.    #e extrai o conteúdo e remove os parênteses
  7.    @percente_change = (market_data/"td/span.chg").inner_text.gsub(/[()]/,'')
  8. end

O resultado final será como a classe abaixo:

RUBY:

  1. class Finance
  2.   require 'rubygems'
  3.   require 'hpricot'
  4.   require 'open-uri'
  5.  
  6.   #inicializa as variáveis ao instanciar
  7.   #a classe Finances
  8.   def initialize(url)
  9.     @hp = Hpricot(open(url))
  10.   end
  11.  
  12.   def symbol
  13.     #procura pelas tags <b><a href=..>...</a></b>,
  14.     #extrai o conteúdo e remove os caracteres \n
  15.     @symbol = (@hp/"b/a").inner_text.gsub(/\n/,'')
  16.   end
  17.  
  18.   def title
  19.     #procura pelo tag <h1>...</h1>
  20.     #e extrai o conteúdo
  21.     @title = (@hp/"h1").inner_text
  22.   end
  23.  
  24.   def index
  25.     #procura pela tag <span class='pr'>...</span>
  26.     #e extrai o conteúdo
  27.     @index = @hp.at("span[@class='pr']").inner_text
  28.   end
  29.  
  30.   def change
  31.     #procura pelas tags <b><span class='chg'>...</span></b>
  32.     #e extrai o conteúdo
  33.     @change = (@hp/"b/span.chg").inner_text
  34.   end
  35.  
  36.   def percente_change
  37.     #extrai o html do <div id="market_data_div">...</div>
  38.     market_data = @hp.search('#market_data_div')
  39.     #procura pelas tags <td><span class='chg'>...</span></td>
  40.     #e extrai o conteúdo e remove os parênteses
  41.     @percente_change = (market_data/"td/span.chg").inner_text.gsub(/[()]/,'')
  42.   end
  43. end

Para testar a classe podemos criar o script abaixo e executá-lo:

RUBY:

  1. require 'finance'
  2.  
  3. f = Finance.new("http://finance.google.com/finance?q=RIO")
  4.  
  5. p f.symbol
  6. p f.title
  7. p f.index
  8. p f.change
  9. p f.percente_change

Resultado:

Finance - Resultado

O exemplo é simples, mas demonstra como poderiamos extrair informações de qualquer página e utilizá-las em nossas aplicações Web (com Ruby on Rails ;) )

Outra poderosa biblioteca que faz uso do Hpricot é o scRUBYt!, mas falarei dela em uma outra oportunidade.

Este post está participando do concurso promovido pelo site Simples Idéias.

1 estrela2 estrelas3 estrelas4 estrelas5 estrelas (5 votes, average: 3.8 out of 5)
Loading ... Loading ...

AddThis Social Bookmark Button

Artigos Relacionados:



Comentários

4 Comments so far

  1. domelhor.net on Abril 21, 2007 4:17 am

    Extraindo dados com Ruby e Hpricote

    Hoje em dia as informaes que podem alimentar um sistema ou website, so de vrios formatos e fontes diferentes, veja como isso simples de se fazer em Ruby…

  2. dihitt.com.br on Abril 21, 2007 4:26 am

    Extraindo dados com Ruby e Hpricote

    Hoje em dia as informações que podem alimentar um sistema ou website, são de vários formatos e fontes diferentes, veja como isso é simples de se fazer em Ruby…

  3. Hugo Baraúna on Maio 12, 2007 7:37 pm

    Olá, gostaria de saber se o browser que você usou para mostrar estas figuras do google finance é o firefox. Se for, qual o nome da extensão para ver o HTML no rodape do firefox, que nem você fez, como da para ver nas figuras do google finance. Obrigadão!

  4. Anderson on Maio 14, 2007 9:27 am

    Olá Hugo,

    Sim, usei o Firefox. O plugin é o Firebug. Para saber um pouco mais, veja o post Conheça o poder do Firebug.

    Abraço

Name (obrigatório)

Email (obrigatório)

Web Site

Deixe seu comentário

Assine nosso feed


Publicidade





Leitores recentes



Parceiros


Uêba - Os Melhores Links

Trabalhando com Rails


Recomende-me