kAPI 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/correios.rb ADDED
@@ -0,0 +1,50 @@
1
+ require "rubygems"
2
+ require "hpricot"
3
+ require "open-uri"
4
+
5
+ class Correios
6
+ @url = "http://websro.correios.com.br"
7
+ @url_rastreamento = "#{@url}/sro_bin/txect01$.QueryList?P_ITEMCODE=&P_LINGUA=001&P_TESTE=&P_TIPO=001&P_COD_UNI="
8
+
9
+ def self.encomenda(numero, url=@url_rastreamento)
10
+ html = Hpricot(open("#{url}#{numero}"))
11
+ encomenda = Encomenda.new(numero)
12
+
13
+ pula_tr = true
14
+ (html/"tr").each do |tr|
15
+ status = nil
16
+ status = self.parse_tr(encomenda, tr) if not pula_tr
17
+ encomenda << status if not status.nil?
18
+ pula_tr = false
19
+ end
20
+ return encomenda
21
+ end
22
+
23
+ private
24
+ def self.parse_tr(encomenda, tr)
25
+ status = nil
26
+ td_count = 0
27
+ (tr/"td").each do |td|
28
+ if td_count == 0
29
+ if td.inner_html =~ /\d{2}\/\d{2}\/\d{4} \d{2}:\d{2}/
30
+ status = EncomendaStatus.new
31
+ parsed_data = td.inner_html.scan(/(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2})/)
32
+ timestamp = parsed_data[0][2] + parsed_data[0][1] + parsed_data[0][0] + parsed_data[0][3] + parsed_data[0][4] + "00"
33
+ status.data = DateTime.parse(timestamp)
34
+ else
35
+ encomenda.primeiro_status_disponivel.detalhes = td.inner_html
36
+ end
37
+ end
38
+
39
+ status.local = td.inner_html if td_count == 1
40
+ if td_count == 2
41
+ parsed_situacao = td.inner_html.scan(/.*>(.*)<.*/)
42
+ status.situacao = parsed_situacao[0][0]
43
+ end
44
+
45
+ td_count += 1
46
+ end
47
+
48
+ return status
49
+ end
50
+ end
data/lib/encomenda.rb ADDED
@@ -0,0 +1,32 @@
1
+ class Encomenda
2
+ attr_reader :numero, :status
3
+
4
+ def initialize(numero)
5
+ @numero = numero
6
+ @status = Array.new
7
+ end
8
+
9
+ def <<(status)
10
+ @status << status
11
+ @status.sort! do |a,b|
12
+ a.data <=> b.data
13
+ end
14
+ end
15
+
16
+ def ultimo_status_disponivel
17
+ @status.last
18
+ end
19
+
20
+ def primeiro_status_disponivel
21
+ @status.first
22
+ end
23
+
24
+ #TODO: refactor - nao sei se deveria estar aqui...
25
+ def to_xml
26
+ xml = "<encomenda numero=\"#{@numero}\">"
27
+ @status.each do |status|
28
+ xml += status.to_xml
29
+ end
30
+ xml += "</encomenda>"
31
+ end
32
+ end
@@ -0,0 +1,16 @@
1
+ class EncomendaStatus
2
+ attr_accessor :data, :local, :situacao, :detalhes
3
+
4
+ def to_s
5
+ return "#{super.to_s} {data=>#{@data}, local=>#{@local}, situacao=>#{@situacao}, detalhes=>#{@detalhes}}"
6
+ end
7
+
8
+ #TODO: refactor - nao sei se deveria estar aqui...
9
+ def to_xml
10
+ xml = "<status data=\"#{@data.to_s}\">"
11
+ xml += "<local>#{@local}</local>"
12
+ xml += "<situacao>#{@situacao}</situacao>"
13
+ xml += "<detalhes>#{@detalhes}</detalhes>"
14
+ xml += "</status>"
15
+ end
16
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kAPI
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Mateus Prado
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-12-08 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: hpricot
16
+ requirement: &70285077778440 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.6.164
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70285077778440
25
+ - !ruby/object:Gem::Dependency
26
+ name: sinatra
27
+ requirement: &70285077777940 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 1.3.1
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70285077777940
36
+ description: API Ruby/REST para rastreamento de pacotes dos Correios.
37
+ email: mateus@mateusprado.com
38
+ executables: []
39
+ extensions: []
40
+ extra_rdoc_files: []
41
+ files:
42
+ - lib/correios.rb
43
+ - lib/encomenda.rb
44
+ - lib/encomenda_status.rb
45
+ homepage: http://github.com/mateusprado/kAPI
46
+ licenses: []
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubyforge_project:
65
+ rubygems_version: 1.8.12
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: API para rastreamento de pacotes dos Correios
69
+ test_files: []