はじめに
Pythonでヤマト運輸の荷物追跡 - Qiita
の二番煎じです。
利用 Web API
[WebAPI]ヤマト運輸の配送状況を確認するAPIを作ってみた
です。
なお、以下の注意に従って利用して下さい。
##利用について
- どなたでもご自由に使用していただいてかまいません。
- アクセスは毎秒1リクエストを超えないようにしてください。酷い場合はアクセス拒否やAPIの公開中止を行います。
スクリプト
元のスクリプトよりも(若干ですが)高機能にしてあります。
- チェックディジットによる伝票番号確認
- 伝票未登録時でもエラーにならない
yamato.rb
#!/usr/bin/env ruby
# coding:utf-8
require 'open-uri'
require 'json'
def print_status(num_str)
result = JSON.load(open("http://nanoappli.com/tracking/api/#{num_str}.json").read)
puts "[最新状況]:#{result['status']}"
puts "[配送物種別]:#{result['itemType']}" if result['result'] == 0
puts "[配送物伝票番号]:#{result['slipNo']}"
return unless result['statusList']
result['statusList'].each do |info|
puts "[時刻]:#{info['date']} #{info['time']} [状況]:#{info['status']} [位置]:#{info['placeName']} (#{info['placeCode']})"
end
end
def digit_checker(num_str)
return false unless num_str.to_i.to_s.size == 12
source = num_str[0, 11].to_i
check_digit = num_str[-1, 1].to_i
source % 7 == check_digit
end
number = ARGV[0]
unless number
puts "使い方: ruby yamato.rb [伝票番号]"
exit
end
unless digit_checker(number)
puts "この伝票番号は誤りです。"
exit
end
print_status(number)
実行例
一部を伏せ字にしています。
$ ruby yamato.rb 123456789013
[最新状況]:伝票番号未登録
[配送物伝票番号]:123456789013
$ ruby yamato.rb 3350846W55XY
[最新状況]:配達完了
[配送物伝票番号]:3350846W55XY
[時刻]:12/27 16:33 [状況]:荷物受付 [位置]: (0X0X00)
[時刻]:12/27 16:33 [状況]:発送 [位置]:××物流システム支店 (0X0X00)
[時刻]:12/28 03:50 [状況]:作業店通過 [位置]: (0XXXX0)
[時刻]:12/28 13:05 [状況]:配達完了 [位置]:○○センター (0XX0X0)
チェックディジットについて
Web API 提供者のこちらを参考にしました。
ヤマト伝票番号の最終桁を求める計算式(CheckDigit)