Sha256: 1589ec2a3724728995c3f5dc61c99ae49d68be27b7562e92356ff0692cd51db4

Contents?: true

Size: 1.28 KB

Versions: 5

Compression:

Stored size: 1.28 KB

Contents

require 'faraday'
require 'nokogiri'

module TakuhaiStatus
	class Sagawa
		attr_reader :key, :time, :state

		def initialize(key)
			@key = key.gsub(/[^0-9]/, '')
			@time, @state = check
		end

		def finish?
			return !!(@state =~ /配達は終了致しました。$/)
		end

	private
		def check
			conn = Faraday.new(url: 'http://k2k.sagawa-exp.co.jp')
			res = conn.post('/p/web/okurijosearch.do', {okurijoNo: @key})
			doc = Nokogiri(res.body)

			begin
				table = doc.css('#detail-1 table').first
				state_line = table.css('tr td')[7].children.map(&:text).first
				if state_line == 'お問い合わせNo.をお確かめ下さい。'
					raise NotMyKey.new('invalid key')
				end
				if state_line == 'お問い合わせのデータは登録されておりません。'
					raise NotMyKey.new('not entry yet')
				end

				state = state_line.split(/[ \u{a0}]+/).last

				begin
					s = state_line.sub(/^[^0-9]+/, '')
					s = state_line if s.empty?
					time = Time.parse(s.gsub(/[^0-9 :]/, '-'))
				rescue ArgumentError
					ship = table.css('tr td')[1].text.strip.gsub(/[^0-9]/, '-')
					time = Time.parse(ship) rescue Time.now
				end
				return time, state
			rescue NoMethodError
				raise NotMyKey.new('invalid response')
			rescue ArgumentError
				return Time.now, ''
			end
		end
	end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
takuhai_status-1.1.3 lib/takuhai_status/sagawa.rb
takuhai_status-1.1.2 lib/takuhai_status/sagawa.rb
takuhai_status-1.1.1 lib/takuhai_status/sagawa.rb
takuhai_status-1.1.0 lib/takuhai_status/sagawa.rb
takuhai_status-1.0.0 lib/takuhai_status/sagawa.rb