Sha256: ea895de40789c406d304b0113254592c001c8e86ae9a3965aff87f7cdffc7829

Contents?: true

Size: 1.66 KB

Versions: 12

Compression:

Stored size: 1.66 KB

Contents

require 'faraday'
require 'nokogiri'

module TakuhaiStatus
	class KuronekoYamato
		attr_reader :key, :time, :state
		TakuhaiStatus.add_service(self)

		def initialize(key)
			@key = key.strip
			raise NotMyKey.new('invalid key format') unless @key =~ /\A[0-9]+\Z/
			@time, @state = check
		end

		def finish?
			return !!(@state =~ /^(お客様引渡|配達|投函)完了|返品/)
		end

	private
		def check
			conn = Faraday.new(url: 'http://toi.kuronekoyamato.co.jp/')
			res = conn.post('/cgi-bin/tneko', {number00: '1', number01: @key})
			doc = Nokogiri(res.body)

			begin
				tr = doc.css('.meisai')[0].css('tr').last
				state = tr.css('td')[1].text
				sday = tr.css('td')[2].text
				stime = tr.css('td')[3].text
				time = Time.parse("#{sday} #{stime}")

				if state == '国内到着'
					begin
						time, state = global_state(doc)
					rescue
						$stderr.puts "error in yamato global, about #{key}"
					end
				end

				return time, state
			rescue NoMethodError
				raise NotMyKey
			rescue ArgumentError
				return Time.now, state || ''
			end
		end

		def global_state(doc)
			form = doc.css('form[method=POST]')
			values = form.css('input[type=hidden]').map{|x| [x[:name], x[:value]]}.flatten
			params = Hash[*values]

			res = Faraday.new.post(
				'http://globaltoi.kuronekoyamato.co.jp/Global/outside',
				params
			)
			html = res.body.force_encoding('Shift_JIS').encode('UTF-8')
			tr = Nokogiri(html).css('table.detail tr')
			state = tr[tr.size-1].css('td')[1].text
			loc = tr[tr.size-1].css('td')[4].text.strip.chop.chop
			stime = "#{tr[tr.size-1].css('td')[2].text} #{tr[tr.size-1].css('td')[3].text}"
			return Time.parse(stime), "#{state}[#{loc}]"
		end
	end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
takuhai_status-1.9.1 lib/takuhai_status/kuronekoyamato.rb
takuhai_status-1.9.0 lib/takuhai_status/kuronekoyamato.rb
takuhai_status-1.8.10 lib/takuhai_status/kuronekoyamato.rb
takuhai_status-1.8.9 lib/takuhai_status/kuronekoyamato.rb
takuhai_status-1.8.8 lib/takuhai_status/kuronekoyamato.rb
takuhai_status-1.8.7 lib/takuhai_status/kuronekoyamato.rb
takuhai_status-1.8.6 lib/takuhai_status/kuronekoyamato.rb
takuhai_status-1.8.5 lib/takuhai_status/kuronekoyamato.rb
takuhai_status-1.8.4 lib/takuhai_status/kuronekoyamato.rb
takuhai_status-1.8.3 lib/takuhai_status/kuronekoyamato.rb
takuhai_status-1.8.2 lib/takuhai_status/kuronekoyamato.rb
takuhai_status-1.8.1 lib/takuhai_status/kuronekoyamato.rb