module Kuroneko::Parser

ページからデータを抽出する

Public Class Methods

parse(page)
Alias for: parse_page
parse_page(page) click to toggle source

ページをから情報を抽出する

@param [Mechanize::Page] page 照会結果のページ @return [Array<Kuroneko::History<Kuroneko::Status>>] 状態履歴

# File lib/kuroneko/parser.rb, line 12
def parse_page(page)
  page.parser.css('table.saisin').map(&method(:parse_history))
end
Also aliased as: parse

Private Class Methods

parse_history(summary) click to toggle source

履歴情報を解析する

@param [Nokogiri::XML::Element] summary <table class=“saisin”> @return [Kuroneko::History<Kuroneko::Status>] 状態履歴

# File lib/kuroneko/parser.rb, line 24
def parse_history(summary)
  number, status = parse_meta(summary)
  statuses = summary.parent.css('table.meisai').first
  statuses = statuses ? parse_statuses(statuses) : [[true, status]]
  History.new(number, statuses.map { |s| Status.new(number, *s) })
end
parse_latest?(td) click to toggle source

状態行の先頭要素から最新状態か判別

@param [Nokogiri::XML::Element] td 状態行の先頭の <td> @return [Boolean] 最新か否か

# File lib/kuroneko/parser.rb, line 35
def parse_latest?(td)
  td.css('img').attribute('src').value == '/images/nimotsu_01.gif'
end
parse_meta(summary) click to toggle source

伝票番号と最新状態名を抽出する

@param [Nokogiri::XML::Element] summary <table class=“saisin”> @return [Array] 伝票番号, 最新状態名

# File lib/kuroneko/parser.rb, line 43
def parse_meta(summary)
  rows = summary.css('tr')
  number = rows[0].css('td')[2].text.gsub(/\D/, '')
  status = rows[1].css('td')[2].text
  [number, status]
end
parse_status(status) click to toggle source

状態を解析する

@param [Nokogiri::XML::Element] status 状態情報のテーブル行 @return [Array] Kuroneko::Status への引数

# File lib/kuroneko/parser.rb, line 54
def parse_status(status)
  attrs = status.css('td').to_a
  latest = parse_latest?(attrs.shift)
  [latest] + attrs.map(&:text)
end
parse_statuses(table) click to toggle source

状態履歴テーブルを解析する

@param [Nokogiri::XML::Element] table <table class=“meisai”> @return [Array<Array>] Kuroneko::Status への引数

# File lib/kuroneko/parser.rb, line 64
def parse_statuses(table)
  statuses = table.css('tr').to_a
  statuses.shift
  statuses.map(&method(:parse_status))
end