Blog do TaQ

Buscando preços com o Hpricot

Publicado em Developer

Hpricot

Continuando na minha dúvida cruel sobre o próximo gadget que eu vou comprar, resolvi fazer programinha para me alertar sobre os preços do Tungsten TX, consultando direto no Buscapé (consultei até 2 páginas de resultados mas esse limite pode ser aumentado facilmente), assim poderia ficar de olho nos preços e ver quando aparece algum interessante. Tá bom, o Buscapé tem até um email para avisar sobre isso, mas sabe como é, a gente gosta de escovar bits, então ... ;-)

Para fazer o parsing do resultado do site, utilizei o Hpricot, do Why. Segundo ele, o Hpricot é:

A Fast, Enjoyable HTML Parser for Ruby

Hpricot is a very flexible HTML parser, based on Tanaka Akira's HTree and John Resig's JQuery, but with the scanner recoded in C (using Ragel for scanning.) I've borrowed what I believe to be the best ideas from these wares to make Hpricot heaps of fun to use.

Para isso eu criei esse programa, que roda no eu usa o Kdialog para me avisar quando tiver alguma coisa interessante. Olhem só:

#!/usr/local/bin/ruby
require 'rubygems'
require 'hpricot'
require 'open-uri'

precos      = []
limite      = 1000

# verifica duas páginas
1.upto(2) do |pagina|
   puts "Verificando a página #{pagina}"
   doc      = open("http://compare.buscape.com.br/prod_unico?idu=43847&pagina=
#{pagina}&kw=palm+tx") {|stream| Hpricot(stream)} doc.search("//a[@class='xl']").collect do |preco| precos << preco.inner_text.match(/[\d.]+/).to_s.sub('.','').to_i end end # será que encontramos alguma coisa? precos = precos.select {|valor| valor < limite} return if precos.size < 1 # se sim, me avise por favor! mensagem = precos.sort.uniq.collect {|preco| "R$ "+preco.to_s}.join(", ") `kdialog --title "Preços do TX" --msgbox "#{mensagem}"`

O resultado pelo menos agora é:

Resultado da busca com o Hpricot

Aqui vocês podem encontrar a documentação do Hpricot. Realmente é um parser leve, eficiente, e fácil de usar.

Atualizado: Apesar de estar claro ali, acho que eu esqueci uma explicação da coisa, mas não tem segredo:


Tags:


Comentários

comments powered by Disqus

Twitter