class Kuroneko

クロネコヤマトの荷物を追跡する

@see toi.kuronekoyamato.co.jp/cgi-bin/tneko

Constants

Status

状態情報

URL

@return [String] 問い合わせフォームの URL

VERSION

@return [String] バージョン

Attributes

agent[RW]

@return [Mechanize] 使用する Mechanize インスタンス

parser[RW]

@return [#parse] ページを解析するパーサ

url[RW]

@return [String] 問い合わせフォームの URL

Public Class Methods

new(options={}) click to toggle source

インスタンスを初期化する

@param [Hash] options @option options [Mechanize] :agent 使用する Mechanize インスタンス @option options [#parse] :parser ページを解析するパーサ @option options [String] :url 問い合わせフォームの URL

# File lib/kuroneko.rb, line 45
def initialize(options={})
  @agent = options[:agent] || Mechanize.new
  @parser = options[:parser] || Parser
  @url = options[:url] || URL.dup
end

Private Class Methods

instance() click to toggle source
# File lib/kuroneko.rb, line 25
def instance
  @instance ||= new
end

Public Instance Methods

histories(*numbers) click to toggle source

複数の荷物の状態履歴を照会する

@param [Array<String, to_s>] numbers 伝票番号 @return [Array<Kuroneko::History<Kuroneko::Status>>] 状態履歴

# File lib/kuroneko.rb, line 63
def histories(*numbers)
  numbers.flatten.each_slice(10).map { |n| query(n) }.flatten(1)
end
history(number) click to toggle source

1 つの荷物の状態履歴を照会する

@param [String, to_s] number 伝票番号 @return [Kuroneko::History<Kuroneko::Status>] 状態履歴

# File lib/kuroneko.rb, line 55
def history(number)
  histories(number).first
end
status(number) click to toggle source

1 つの荷物の最新状態を照会する

@param [String, to_s] number 伝票番号 @return [Kuroneko::Status] 最新状態

# File lib/kuroneko.rb, line 71
def status(number)
  history(number).latest
end
statuses(*numbers) click to toggle source

複数の荷物の最新状態を取得する

@param [Array<String, to_s>] numbers 伝票番号 @return [Array<Kuroneko::Status>] 最新状態

# File lib/kuroneko.rb, line 79
def statuses(*numbers)
  histories(*numbers).map(&:latest)
end

Private Instance Methods

prepare_form(form, numbers) click to toggle source

フォームパラメータをセットする

@param [Mechanize::Form] form @param [Array<String, to_s>] numbers 伝票番号 @return [void]

# File lib/kuroneko.rb, line 90
def prepare_form(form, numbers)
  numbers.each.with_index(1) do |number, index|
    form["number%02d" % index] = number
  end
end
query(numbers) click to toggle source

リクエストを送信して状態を抽出する

@param [Array<String, to_s>] numbers 伝票番号 @return [Array<Kuroneko::History<Kuroneko::Status>>] 状態履歴

# File lib/kuroneko.rb, line 100
def query(numbers)
  result_page = request(numbers)
  parser.parse(result_page)
end
request(numbers) click to toggle source

照会リクエストを送る

@param [Array<String, to_s>] numbers 伝票番号、1 度に 10 件まで @return [Mechanize::Page] 照会結果のページ

# File lib/kuroneko.rb, line 109
def request(numbers)
  form = agent.get(url).form
  prepare_form(form, numbers)
  form.submit
end