kAPI 0.0.1
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/lib/correios.rb +50 -0
- data/lib/encomenda.rb +32 -0
- data/lib/encomenda_status.rb +16 -0
- metadata +69 -0
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: []
|