guia_mais 0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Manifest +3 -0
- data/Rakefile +14 -0
- data/guia_mais.gemspec +37 -0
- data/lib/guia_mais.rb +112 -0
- data/test/guia_mais_test.rb +51 -0
- metadata +82 -0
data/Manifest
ADDED
data/Rakefile
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
require "rubygems"
|
|
3
|
+
require "rake"
|
|
4
|
+
require "echoe"
|
|
5
|
+
|
|
6
|
+
Echoe.new("guia_mais", "0.2") do |p|
|
|
7
|
+
p.description = "Busca dados no site Guia Mais através do telefone"
|
|
8
|
+
p.author = "Claudemiro Alves Feitosa Neto"
|
|
9
|
+
p.email = "dimiro1@gmail.com"
|
|
10
|
+
p.ignore_pattern = ["tmp/*", "script/*"]
|
|
11
|
+
p.development_dependencies = ["hpricot", "httparty"]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
data/guia_mais.gemspec
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
Gem::Specification.new do |s|
|
|
4
|
+
s.name = %q{guia_mais}
|
|
5
|
+
s.version = "0.2"
|
|
6
|
+
|
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
|
8
|
+
s.authors = ["Claudemiro Alves Feitosa Neto"]
|
|
9
|
+
s.date = %q{2009-11-09}
|
|
10
|
+
s.description = %q{Busca dados no site Guia Mais através do telefone}
|
|
11
|
+
s.email = %q{dimiro1@gmail.com}
|
|
12
|
+
s.extra_rdoc_files = ["lib/guia_mais.rb"]
|
|
13
|
+
s.files = ["Rakefile", "Manifest", "lib/guia_mais.rb", "guia_mais.gemspec", "test/guia_mais_test.rb"]
|
|
14
|
+
s.homepage = %q{}
|
|
15
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Guia_mais", "--main", "README"]
|
|
16
|
+
s.require_paths = ["lib"]
|
|
17
|
+
s.rubyforge_project = %q{guia_mais}
|
|
18
|
+
s.rubygems_version = %q{1.3.5}
|
|
19
|
+
s.summary = %q{Busca dados no site Guia Mais através do telefone}
|
|
20
|
+
s.test_files = ["test/guia_mais_test.rb"]
|
|
21
|
+
|
|
22
|
+
if s.respond_to? :specification_version then
|
|
23
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
|
24
|
+
s.specification_version = 3
|
|
25
|
+
|
|
26
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
|
27
|
+
s.add_development_dependency(%q<hpricot>, [">= 0"])
|
|
28
|
+
s.add_development_dependency(%q<httparty>, [">= 0"])
|
|
29
|
+
else
|
|
30
|
+
s.add_dependency(%q<hpricot>, [">= 0"])
|
|
31
|
+
s.add_dependency(%q<httparty>, [">= 0"])
|
|
32
|
+
end
|
|
33
|
+
else
|
|
34
|
+
s.add_dependency(%q<hpricot>, [">= 0"])
|
|
35
|
+
s.add_dependency(%q<httparty>, [">= 0"])
|
|
36
|
+
end
|
|
37
|
+
end
|
data/lib/guia_mais.rb
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
require "rubygems"
|
|
3
|
+
require "httparty"
|
|
4
|
+
require "hpricot"
|
|
5
|
+
require "timeout"
|
|
6
|
+
|
|
7
|
+
class String
|
|
8
|
+
def to_utf8
|
|
9
|
+
unpack("C*").pack("U*")
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
module GuiaMais
|
|
14
|
+
class GuiaMaisException < Exception
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
ESTADOS = {
|
|
18
|
+
:acre => {:guia => 579, :sigla => 'AC'},
|
|
19
|
+
:alagoas => {:guia => 580, :sigla => 'AL'},
|
|
20
|
+
:amazonas => {:guia => 325, :sigla => 'AM'},
|
|
21
|
+
:amapa => {:guia => 581, :sigla => 'AP'},
|
|
22
|
+
:bahia => {:guia => 326, :sigla => 'BA'},
|
|
23
|
+
:ceara => {:guia => 582, :sigla => 'CE'},
|
|
24
|
+
:distrito_federal => {:guia => 327, :sigla => 'DF'},
|
|
25
|
+
:espirito_santo => {:guia => 328, :sigla => 'ES'},
|
|
26
|
+
:goias => {:guia => 329, :sigla => 'GO'},
|
|
27
|
+
:maranhao => {:guia => 584, :sigla => 'MA'},
|
|
28
|
+
:minas_gerais => {:guia => 585, :sigla => 'MG'},
|
|
29
|
+
:mato_grosso_do_sul => {:guia => 586, :sigla => 'MS'},
|
|
30
|
+
:mato_grosso => {:guia => 587, :sigla => 'MT'},
|
|
31
|
+
:para => {:guia => 330, :sigla => 'PA'},
|
|
32
|
+
:paraiba => {:guia => 588, :sigla => 'PB'},
|
|
33
|
+
:pernambuco => {:guia => 589, :sigla => 'PE'},
|
|
34
|
+
:piaui => {:guia => 590, :sigla => 'PI'},
|
|
35
|
+
:parana => {:guia => 331, :sigla => 'PR'},
|
|
36
|
+
:rio_de_janeiro => {:guia => 333, :sigla => 'RJ'},
|
|
37
|
+
:rio_grande_do_norte => {:guia => 591, :sigla => 'RN'},
|
|
38
|
+
:rondonia => {:guia => 592, :sigla => 'RO'},
|
|
39
|
+
:roraima => {:guia => 593, :sigla => 'RR'},
|
|
40
|
+
:rio_grande_do_sul => {:guia => 334, :sigla => 'RS'},
|
|
41
|
+
:santa_catarina => {:guia => 335, :sigla => 'SC'},
|
|
42
|
+
:sergipe => {:guia => 594, :sigla => 'SE'},
|
|
43
|
+
:sao_paulo => {:guia => 336, :sigla => 'SP'},
|
|
44
|
+
:tocantins => {:guia => 595, :sigla => 'TO'}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
class Cliente
|
|
48
|
+
attr_reader :nome, :telefone, :endereco, :bairro, :cep, :categoria
|
|
49
|
+
def initialize(nome, telefone, endereco, bairro, cep, categoria)
|
|
50
|
+
@nome = nome
|
|
51
|
+
@telefone = telefone
|
|
52
|
+
@endereco = endereco
|
|
53
|
+
@bairro = bairro
|
|
54
|
+
@cep = cep
|
|
55
|
+
@categoria = categoria
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def self.buscar(oque, params)
|
|
59
|
+
Minerador.buscar(oque, params)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
class Minerador
|
|
65
|
+
include HTTParty
|
|
66
|
+
base_uri "http://www.guiamais.com.br"
|
|
67
|
+
@@pagina = ""
|
|
68
|
+
@@query = {}
|
|
69
|
+
|
|
70
|
+
def self.buscar(oque, query = {})
|
|
71
|
+
query[:txb] = oque
|
|
72
|
+
query[:nes] ||= ESTADOS[query[:estado]][:sigla] if query[:estado]
|
|
73
|
+
query[:ies] ||= ESTADOS[query[:estado]][:guia] if query[:estado]
|
|
74
|
+
query.delete(:estado)
|
|
75
|
+
@@query = query
|
|
76
|
+
resultado = get("/Results.aspx", :query => query)
|
|
77
|
+
@@pagina = Hpricot(resultado.body.to_utf8)
|
|
78
|
+
minerar_dados
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
private
|
|
82
|
+
|
|
83
|
+
def self.buscar_elemento(elemento)
|
|
84
|
+
resultado = @@pagina.search(elemento).first
|
|
85
|
+
resultado ? resultado.inner_html : nil
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def self.minerar_dados
|
|
89
|
+
nome, endereco, bairro, cep, categoria = nil
|
|
90
|
+
begin
|
|
91
|
+
timeout(10) do
|
|
92
|
+
nome = buscar_elemento("div#ctl00_C1_RR_ctl00_lst_oPanelTittle span.txtT")
|
|
93
|
+
unless nome
|
|
94
|
+
nome = buscar_elemento("div#ctl00_C1_RR_ctl00_lst_oPanelTittle span.txtTitleBlack")
|
|
95
|
+
end
|
|
96
|
+
unless nome
|
|
97
|
+
nome = buscar_elemento("div#ctl00_C1_RR_ctl00_lst_oPanelTittle a.txtT")
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
endereco = buscar_elemento("div#ctl00_C1_RR_ctl00_lst_oPanelTitleCat+div div.divAddress>span.CmpInf")
|
|
101
|
+
bairro = buscar_elemento("div#ctl00_C1_RR_ctl00_lst_oPanelTitleCat+div div.divNeighborHood>span.CmpInf")
|
|
102
|
+
cep = buscar_elemento("div#ctl00_C1_RR_ctl00_lst_oPanelTitleCat+div div.divCEP>span.CmpInf")
|
|
103
|
+
categoria = buscar_elemento("div#ctl00_C1_RR_ctl00_lst_oPanelCategory>span.CmpInf")
|
|
104
|
+
end
|
|
105
|
+
rescue TimeoutError
|
|
106
|
+
raise GuiaMaisException.new, 'GuiaMais fora do ar'
|
|
107
|
+
end
|
|
108
|
+
return Cliente.new(nome, @@query[:txb], endereco, bairro, cep, categoria)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
end
|
|
112
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
require "#{Dir.pwd}/lib/guia_mais.rb"
|
|
3
|
+
require "test/unit"
|
|
4
|
+
|
|
5
|
+
class GuiaMaisTest < Test::Unit::TestCase
|
|
6
|
+
def test_se_funciona_com_32222222_RN
|
|
7
|
+
cliente = GuiaMais::Cliente.buscar("32222222", :estado => :rio_grande_do_norte)
|
|
8
|
+
assert_equal cliente.nome, "MED DIET DROGARIA"
|
|
9
|
+
assert_equal cliente.endereco, "Av Afonso Pena 939 "
|
|
10
|
+
assert_equal cliente.bairro, "Tirol"
|
|
11
|
+
assert_equal cliente.cep, "59020-100"
|
|
12
|
+
assert_equal cliente.categoria, "Farmácias e Drogarias - Art"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_se_funciona_com_32222222_PI
|
|
16
|
+
cliente = GuiaMais::Cliente.buscar("32222222", :estado => :piaui)
|
|
17
|
+
assert_equal cliente.nome, "RÁDIO TÁXI"
|
|
18
|
+
assert_equal cliente.endereco, "R Álvaro Ferreira, 60"
|
|
19
|
+
assert_equal cliente.bairro, "Monte Castelo"
|
|
20
|
+
assert_equal cliente.cep, "64017-380"
|
|
21
|
+
assert_equal cliente.categoria, "Táxi"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_se_funciona_com_32222222_AP
|
|
25
|
+
cliente = GuiaMais::Cliente.buscar("32222222", :estado => :amapa)
|
|
26
|
+
assert_equal cliente.nome, "ELDORADO VEÍCULOS"
|
|
27
|
+
assert_equal cliente.endereco, "Rod Br-156 km 3 Boné Azul"
|
|
28
|
+
assert_equal cliente.bairro, "Lotm Açaí"
|
|
29
|
+
assert_equal cliente.cep, "68900-001"
|
|
30
|
+
assert_equal cliente.categoria, "Automóveis - Agências e Revendedores"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_se_funciona_com_32325151_PI
|
|
34
|
+
cliente = GuiaMais::Cliente.buscar("32325151", :estado => :piaui)
|
|
35
|
+
assert_equal cliente.nome, "ARTTE DOS PÉS"
|
|
36
|
+
assert_equal cliente.endereco, "Av Dom Severino, 1065"
|
|
37
|
+
assert_equal cliente.bairro, "Fátima"
|
|
38
|
+
assert_equal cliente.cep, "64049-370"
|
|
39
|
+
assert_equal cliente.categoria, "Cabeleireiros e Institutos de Beleza"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_se_funciona_com_32321311_PI
|
|
43
|
+
cliente = GuiaMais::Cliente.buscar("32331128", :estado => :piaui)
|
|
44
|
+
assert_equal cliente.nome, "ALEMANHA VEICULOS"
|
|
45
|
+
assert_equal cliente.endereco, "Av João XXIII 3480 "
|
|
46
|
+
assert_equal cliente.bairro, "Noivos"
|
|
47
|
+
assert_equal cliente.cep, "64045-000"
|
|
48
|
+
assert_equal cliente.categoria, "Automóveis - Concessionárias e Serviços Autorizados"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: guia_mais
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: "0.2"
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Claudemiro Alves Feitosa Neto
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
|
|
12
|
+
date: 2009-11-09 00:00:00 -03:00
|
|
13
|
+
default_executable:
|
|
14
|
+
dependencies:
|
|
15
|
+
- !ruby/object:Gem::Dependency
|
|
16
|
+
name: hpricot
|
|
17
|
+
type: :development
|
|
18
|
+
version_requirement:
|
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
20
|
+
requirements:
|
|
21
|
+
- - ">="
|
|
22
|
+
- !ruby/object:Gem::Version
|
|
23
|
+
version: "0"
|
|
24
|
+
version:
|
|
25
|
+
- !ruby/object:Gem::Dependency
|
|
26
|
+
name: httparty
|
|
27
|
+
type: :development
|
|
28
|
+
version_requirement:
|
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: "0"
|
|
34
|
+
version:
|
|
35
|
+
description: "Busca dados no site Guia Mais atrav\xC3\xA9s do telefone"
|
|
36
|
+
email: dimiro1@gmail.com
|
|
37
|
+
executables: []
|
|
38
|
+
|
|
39
|
+
extensions: []
|
|
40
|
+
|
|
41
|
+
extra_rdoc_files:
|
|
42
|
+
- lib/guia_mais.rb
|
|
43
|
+
files:
|
|
44
|
+
- Rakefile
|
|
45
|
+
- Manifest
|
|
46
|
+
- lib/guia_mais.rb
|
|
47
|
+
- guia_mais.gemspec
|
|
48
|
+
has_rdoc: true
|
|
49
|
+
homepage: ""
|
|
50
|
+
licenses: []
|
|
51
|
+
|
|
52
|
+
post_install_message:
|
|
53
|
+
rdoc_options:
|
|
54
|
+
- --line-numbers
|
|
55
|
+
- --inline-source
|
|
56
|
+
- --title
|
|
57
|
+
- Guia_mais
|
|
58
|
+
- --main
|
|
59
|
+
- README
|
|
60
|
+
require_paths:
|
|
61
|
+
- lib
|
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
63
|
+
requirements:
|
|
64
|
+
- - ">="
|
|
65
|
+
- !ruby/object:Gem::Version
|
|
66
|
+
version: "0"
|
|
67
|
+
version:
|
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
69
|
+
requirements:
|
|
70
|
+
- - ">="
|
|
71
|
+
- !ruby/object:Gem::Version
|
|
72
|
+
version: "1.2"
|
|
73
|
+
version:
|
|
74
|
+
requirements: []
|
|
75
|
+
|
|
76
|
+
rubyforge_project: guia_mais
|
|
77
|
+
rubygems_version: 1.3.5
|
|
78
|
+
signing_key:
|
|
79
|
+
specification_version: 3
|
|
80
|
+
summary: "Busca dados no site Guia Mais atrav\xC3\xA9s do telefone"
|
|
81
|
+
test_files:
|
|
82
|
+
- test/guia_mais_test.rb
|