Last active
December 20, 2015 02:29
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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