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 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