Class: JpPost::Tracking

Inherits:
Object
  • Object
show all
Defined in:
lib/jp_post/tracking.rb

Instance Method Summary collapse

Constructor Details

#initialize(tracking_number) ⇒ Tracking

Create a new Tracking object.

tracking_number - tracking number of the package to lookup.

Returns an instance of JpPost::Tracking.

Raises:

  • (ArgumentError)


12
13
14
15
16
17
18
19
# File 'lib/jp_post/tracking.rb', line 12

def initialize(tracking_number)
  raise ArgumentError unless tracking_number

  @tracking_number = tracking_number
  tracking_url = "https://trackings.post.japanpost.jp/services/srv/search/direct?reqCodeNo1=#{@tracking_number}&locale=en"

  @tracking_page = Nokogiri::HTML(Typhoeus.get(tracking_url).body)
end

Instance Method Details

#additional_servicesObject

“Additional Services” string from tracking site

Returns additional_services String.



35
36
37
38
39
40
41
# File 'lib/jp_post/tracking.rb', line 35

def additional_services
  return nil if tracking_is_empty

  @delivery_status_details_box ||= @tracking_page.css(".indent table[summary='配達状況詳細']")
  additional_services = @delivery_status_details_box.css(".w_100").last.text.strip
  return additional_services
end

#classificationObject

“Class of Goods” string from tracking site

Returns classification String.



24
25
26
27
28
29
30
# File 'lib/jp_post/tracking.rb', line 24

def classification
  return nil if tracking_is_empty
  
  @delivery_status_details_box ||= @tracking_page.css(".indent table[summary='配達状況詳細']")
  classification = @delivery_status_details_box.css("tr:last .w_380").text.strip
  return classification
end

#historyObject

“History Information” table from tracking site

Returns tracking history as Array.



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/jp_post/tracking.rb', line 46

def history
  return nil if tracking_is_empty

  @history_information_box ||= @tracking_page.css(".indent table[summary='履歴情報']")
  history_columns = @history_information_box.css("tr")
  history_columns = history_columns[2..history_columns.size] # remove header

  history = []

  history_columns.each_with_index do |tr, index|
    next if index.odd? # skip zip code row
    date = Chronic.parse(tr.css("td").first.text) rescue nil

    action = tr.css("td")[1].text.strip
    action = nil if action.empty?

    details = tr.css("td")[2].text.strip
    details = nil if action.empty?

    office = tr.css("td")[3].text.strip
    office = nil if action.empty?

    location = tr.css("td")[4].text.strip
    location = nil if action.empty?

    history << { date: date, action: action, details: details, office: office, location: location }
  end

  return history
end