guia_mais 0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest ADDED
@@ -0,0 +1,3 @@
1
+ Rakefile
2
+ Manifest
3
+ lib/guia_mais.rb
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