Module: PacTrac::Carrier::ChinaPost
- Defined in:
- lib/pactrac/carrier/china_post.rb
Class Method Summary collapse
- .parse_tracking_data(response) ⇒ Object
- .start_session ⇒ Object
- .title ⇒ Object
- .tracking_number_relevant?(tracking_number) ⇒ Boolean
- .tracking_request(tracking_number, session) ⇒ Object
- .user_agent ⇒ Object
- .verify(tracking_number, verification, session) ⇒ Object
Class Method Details
.parse_tracking_data(response) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/pactrac/carrier/china_post.rb', line 57 def parse_tracking_data(response) doc = Nokogiri::HTML(response.raw.body) table = doc.css('table.txt-main') if table.nil? return Err.new(false, 'unable to find tracking data table') end tracking_data = { :updates => [] } first = true table.css('tr').each do |row| if first first = false next end cells = row.css('td') next if cells.nil? or cells.length < 6 tracking_data[:updates] << { :at => DateTime.parse(cells[5].text.strip), :location => cells[3].text.strip, :message => cells[2].text.strip, } end if tracking_data[:updates].empty? return Err.new(false, "unable to extract any tracking data") end return Err.new(true), tracking_data end |
.start_session ⇒ Object
84 85 86 |
# File 'lib/pactrac/carrier/china_post.rb', line 84 def start_session Http::Session.start('intmail.183.com.cn', 80) end |
.title ⇒ Object
16 17 18 |
# File 'lib/pactrac/carrier/china_post.rb', line 16 def title 'China Post' end |
.tracking_number_relevant?(tracking_number) ⇒ Boolean
20 21 22 |
# File 'lib/pactrac/carrier/china_post.rb', line 20 def tracking_number_relevant?(tracking_number) tracking_number.strip.match(/^RA\d+CN$/) end |
.tracking_request(tracking_number, session) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/pactrac/carrier/china_post.rb', line 24 def tracking_request(tracking_number, session) err, raw = Http.request(Net::HTTP::Get.new( '/item/trace/itemTrace.jsp', 'User-Agent' => user_agent), session) return err unless err.valid # Get validation image err, raw = Http.request(Net::HTTP::Get.new('/rand', 'User-Agent' => user_agent), session) unless err.valid return Err.new(false, "there was a problem connecting to the China Post server, " + "#{err.msg}") end f = Verify::File.create('china_post.jpg', raw.body) return Err.new(true), Response.new(raw, true, "file://#{f}") end |
.user_agent ⇒ Object
88 89 90 91 |
# File 'lib/pactrac/carrier/china_post.rb', line 88 def user_agent 'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.1 (KHTML, like' + ' Gecko) Chrome/21.0.1180.75 Safari/537.1' end |
.verify(tracking_number, verification, session) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/pactrac/carrier/china_post.rb', line 41 def verify(tracking_number, verification, session) req = Net::HTTP::Post.new('/item/trace/itemTraceAction.do', 'User-Agent' => user_agent) req.set_form_data({ :itemNo => tracking_number, :rand => verification }) if session. req['Cookie'] = Http::Cookie.to_request_header_value(session.) end err, raw = Http.request(req, session) unless err.valid return Err.new(false, "there was a problem connecting to the China Post server, " + "#{err.msg}") end return Err.new(true), Response.new(raw, false) end |