Skip to content

Instantly share code, notes, and snippets.

@deyvin
Last active December 20, 2015 02:29
Show Gist options
  • Save deyvin/6056644 to your computer and use it in GitHub Desktop.
Save deyvin/6056644 to your computer and use it in GitHub Desktop.
Script para pesquisar preço dos ecommerce a partir do código interno do produto
require 'nokogiri'
require 'open-uri'
require 'mysql2'
class Ecommerce
attr_accessor :id, :name, :price, :bank_price, :con
@@con = Mysql2::Client.new(:host => 'localhost', :username => 'root', :password => '1234', :database => 'ecommerce')
def acessar_site(url)
Nokogiri::HTML(open(url, :proxy_http_basic_authentication => ['http://192.168.254.200:8080', 'deyvin', 'fdcsistemas123'] ))
end
def grava_banco
@@con.query "INSERT INTO PRODUTOS (CODE, ECOMMERCE, NOME, PRECO) \
VALUES (#{@id}, '#{store_name}', '#{@name.gsub('"', '')}', '#{@bank_price}')"
end
def atualiza_banco
@@con.query "UPDATE PRODUTOS SET PRECO = '#{@bank_price}' WHERE CODE = #{@id}"
end
def compara_preco
results = @@con.query "SELECT MAX(PRECO) PRECO FROM PRODUTOS WHERE CODE = '#{id}'"
if !results.first['PRECO'].nil?
if results.first['PRECO'].round(2) < @bank_price
atualiza_banco
notificar "aumentou"
elsif results.first['PRECO'].round(2) > @bank_price
notificar "abaixou"
else
notificar "mesmo preco"
end
else
grava_banco
produto_excluido
end
end
def notificar(info)
if info == "abaixou"
notificar_via_sms
end
`notify-send -i gtk-dialog-info -u normal "#{store_name} [#{info}]" "#{@name.gsub('"', '')} \n\n Preco: R$ #{@bank_price} (boletex)"`
end
def produto_excluido
`notify-send -i gtk-dialog-info -u normal "#{store_name} [EXCLUIDO]" "#{@name.gsub('"', '')} \n\n"`
end
def notificar_via_sms
msg = URI.encode("#{store_name} \n\n Abaixou o preco do #{@name.gsub('"', '')} \n\n Preco: R$ #{@bank_price} no boletex\n\n")
url = "http://www.fsist.com.br/sms.aspx?tel=2298110095&msg=#{msg}"
open = open(url, :proxy_http_basic_authentication => ['http://192.168.254.200:8080', 'deyvin', 'fdcsistemas123'] )
doc = Nokogiri::HTML(open)
doc.css("body").first.content
end
end
class Extra < Ecommerce
attr_accessor :id, :name, :price, :bank_price, :store_name
def qual_preco_do_produto(id)
doc = acessar_site("http://extra.com.br/Moveis/SaladeEstar/SofasePoltronas/Sofa-#{id}.html")
if doc.css('#ctl00_Conteudo_ctl02_spanPrecoPor .price').first.nil?
produto_excluido
exit
end
preco = doc.css('#ctl00_Conteudo_ctl02_spanPrecoPor .price').first.content.gsub(/[^\d]/, '')
preco = "#{preco[0..2]}.#{preco[3, 2]}".to_f
boleto = doc.css('.boxFormasD span strong').first.content.gsub(/[^\d]/, '')
boleto = "#{boleto[0..2]}.#{boleto[3, 2]}".to_f
@id = id
@name = doc.css('h1').first.content.strip
@price = preco
@bank_price = boleto
@store_name = "Extra"
compara_preco
self
end
end
class Submarino < Ecommerce
attr_accessor :id, :name, :price, :bank_price, :store_name
def qual_preco_do_produto(id)
doc = acessar_site("http://www.submarino.com.br/produto/#{id}")
if doc.css('strong span.amount').first.nil?
produto_excluido
exit
end
preco = doc.css('strong span.amount').first.content.gsub(/[^\d]/, '')
boleto = doc.css('span.bankprice:not(.amount)').first.content.gsub(/[^\d]/, '')[0.. -3]
boleto = "#{boleto[0..2]}.#{boleto[3, 2]}".to_f
preco = "#{preco[0..2]}.#{preco[3, 2]}".to_f
@id = id
@name = doc.css('h1').first.content.strip
@price = preco
@bank_price = boleto
@store_name = "submarino"
compara_preco
self
end
end
class Americanas < Ecommerce
attr_accessor :id, :name, :price, :bank_price, :store_name
def qual_preco_do_produto(id)
doc = acessar_site("http://www.americanas.com.br/produto/#{id}")
if doc.css('p.sale span.price').first.nil?
produto_excluido
exit
end
preco = doc.css('p.sale span.price').first.content.gsub(/[^\d]/, '')
boleto = doc.css('span.bankBill').first.content.gsub(/[^\d]/, '')[0.. -3]
boleto = "#{boleto[0..2]}.#{boleto[3, 2]}".to_f
preco = "#{preco[0..2]}.#{preco[3, 2]}".to_f
@id = id
@name = doc.css('h1.title').first.content.strip
@price = preco
@bank_price = boleto
@store_name = "americanas"
compara_preco
self
end
end
class Ricardoeletro < Ecommerce
attr_accessor :id, :name, :price, :bank_price, :store_name
def qual_preco_do_produto(id)
doc = acessar_site("http://www.ricardoeletro.com.br/Produto/a/1-2-3-#{id}")
if doc.css('span#ProdutoDetalhesPrecoComprarAgoraPrecoDePreco').first.nil?
produto_excluido
exit
end
preco = doc.css('span#ProdutoDetalhesPrecoComprarAgoraPrecoDePreco').first.content.gsub(/[^\d]/, '')
boleto = doc.css('span#ProdutoDetalhesPrecoComprarAgoraPrecoDePreco').first.content.gsub(/[^\d]/, '')[0.. -3]
boleto = "#{boleto[0..2]}.#{boleto[3, 2]}".to_f
preco = "#{preco[0..2]}.#{preco[3, 2]}".to_f
@id = id
@name = doc.css('div#ProdutoDetalhesNomeProduto h1').first.content.strip
@price = preco
@bank_price = boleto
@store_name = "ricardoeletro"
compara_preco
self
end
end
#americanas = Americanas.new
#americanas.qual_preco_do_produto(113673527)
#submarino = Submarino.new
#submarino.qual_preco_do_produto(7111164)
ricardoeletro = Ricardoeletro.new
ricardoeletro.qual_preco_do_produto(241278)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment