pactrac 0.0.1 → 0.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/bin/pactrac +1 -1
- data/lib/pactrac/carrier.rb +2 -1
- data/lib/pactrac/carrier/china_post.rb +93 -0
- metadata +4 -3
data/bin/pactrac
CHANGED
data/lib/pactrac/carrier.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'pactrac/carrier/dhl'
|
2
2
|
require 'pactrac/carrier/ems'
|
3
|
+
require 'pactrac/carrier/china_post'
|
3
4
|
require 'pactrac/err'
|
4
5
|
|
5
6
|
module PacTrac
|
@@ -7,7 +8,7 @@ module PacTrac
|
|
7
8
|
module_function
|
8
9
|
|
9
10
|
def all
|
10
|
-
[Carrier::Dhl, Carrier::Ems]
|
11
|
+
[Carrier::Dhl, Carrier::Ems, Carrier::ChinaPost]
|
11
12
|
end
|
12
13
|
|
13
14
|
def for_tracking_number(tracking_number)
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
require 'pactrac/err'
|
3
|
+
require 'pactrac/response'
|
4
|
+
require 'pactrac/http'
|
5
|
+
require 'pactrac/http/session'
|
6
|
+
require 'pactrac/http/cookie'
|
7
|
+
require 'pactrac/verify/file'
|
8
|
+
require 'net/http'
|
9
|
+
require 'date'
|
10
|
+
|
11
|
+
module PacTrac
|
12
|
+
module Carrier
|
13
|
+
module ChinaPost
|
14
|
+
module_function
|
15
|
+
|
16
|
+
def title
|
17
|
+
'China Post'
|
18
|
+
end
|
19
|
+
|
20
|
+
def tracking_number_relevant?(tracking_number)
|
21
|
+
tracking_number.strip.match(/^RA\d+CN$/)
|
22
|
+
end
|
23
|
+
|
24
|
+
def tracking_request(tracking_number, session)
|
25
|
+
err, raw = Http.request(Net::HTTP::Get.new(
|
26
|
+
'/item/trace/itemTrace.jsp',
|
27
|
+
'User-Agent' => user_agent), session)
|
28
|
+
return err unless err.valid
|
29
|
+
# Get validation image
|
30
|
+
err, raw = Http.request(Net::HTTP::Get.new('/rand',
|
31
|
+
'User-Agent' => user_agent), session)
|
32
|
+
unless err.valid
|
33
|
+
return Err.new(false,
|
34
|
+
"there was a problem connecting to the China Post server, " +
|
35
|
+
"#{err.msg}")
|
36
|
+
end
|
37
|
+
f = Verify::File.create('china_post.jpg', raw.body)
|
38
|
+
return Err.new(true), Response.new(raw, true, "file://#{f}")
|
39
|
+
end
|
40
|
+
|
41
|
+
def verify(tracking_number, verification, session)
|
42
|
+
req = Net::HTTP::Post.new('/item/trace/itemTraceAction.do',
|
43
|
+
'User-Agent' => user_agent)
|
44
|
+
req.set_form_data({ :itemNo => tracking_number, :rand => verification })
|
45
|
+
if session.cookies
|
46
|
+
req['Cookie'] = Http::Cookie.to_request_header_value(session.cookies)
|
47
|
+
end
|
48
|
+
err, raw = Http.request(req, session)
|
49
|
+
unless err.valid
|
50
|
+
return Err.new(false,
|
51
|
+
"there was a problem connecting to the China Post server, " +
|
52
|
+
"#{err.msg}")
|
53
|
+
end
|
54
|
+
return Err.new(true), Response.new(raw, false)
|
55
|
+
end
|
56
|
+
|
57
|
+
def parse_tracking_data(response)
|
58
|
+
doc = Nokogiri::HTML(response.raw.body)
|
59
|
+
table = doc.css('table.txt-main')
|
60
|
+
if table.nil?
|
61
|
+
return Err.new(false, 'unable to find tracking data table')
|
62
|
+
end
|
63
|
+
tracking_data = { :updates => [] }
|
64
|
+
first = true
|
65
|
+
table.css('tr').each do |row|
|
66
|
+
if first
|
67
|
+
first = false
|
68
|
+
next
|
69
|
+
end
|
70
|
+
cells = row.css('td')
|
71
|
+
next if cells.nil? or cells.length < 6
|
72
|
+
tracking_data[:updates] << {
|
73
|
+
:at => DateTime.parse(cells[5].text.strip),
|
74
|
+
:location => cells[3].text.strip,
|
75
|
+
:message => cells[2].text.strip,
|
76
|
+
}
|
77
|
+
end
|
78
|
+
return Err.new(false, "unable to extract any tracking data, " +
|
79
|
+
err.msg) if tracking_data[:updates].empty?
|
80
|
+
return Err.new(true), tracking_data
|
81
|
+
end
|
82
|
+
|
83
|
+
def start_session
|
84
|
+
Http::Session.start('intmail.183.com.cn', 80)
|
85
|
+
end
|
86
|
+
|
87
|
+
def user_agent
|
88
|
+
'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.1 (KHTML, like' +
|
89
|
+
' Gecko) Chrome/21.0.1180.75 Safari/537.1'
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pactrac
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael Alexander
|
@@ -92,6 +92,7 @@ extra_rdoc_files: []
|
|
92
92
|
files:
|
93
93
|
- lib/pactrac/carrier/dhl.rb
|
94
94
|
- lib/pactrac/carrier/ems.rb
|
95
|
+
- lib/pactrac/carrier/china_post.rb
|
95
96
|
- lib/pactrac/err.rb
|
96
97
|
- lib/pactrac/http.rb
|
97
98
|
- lib/pactrac/http/session.rb
|