04
MARCH
レポートFRIDAY 2022 / 3 / 4
ヤマト運輸のサービスで配送にかかる日数と最速の時間帯指定の情報を一括して取得したい
Text by Hiroyuki Matsumoto
宅配業者を利用する場合「最短でいつ届くか」「時間帯指定は何時以降可能か」を調べたい場合があります。
通常はせいぜい数件しか調べる必要がありませんので、料金・お届け予定日検索(宅急便)|ヤマト運輸などの宅配業者の提供するウェブサービスを使えば十分調べられます。
しかし、通信販売サイトを運用している場合、「可能な限り受取可能な日と時間を提示したい」という需要があります。
全郵便番号の組み合わせでデータを取得するのは手間で、仮にそれを自動化をした場合でも膨大な時間がかかる上、「サイトに過負荷をかけて業務を妨害した」と立件される恐れもあります。
(ついでに言えば毎月ちょっとだけ変わるそうです……)
そこでヤマト運輸様に問い合わせてみたところ、
「ヤマトビジネスメンバーズに加入されているなら、マスタパックを入手したらできるよ!」
というありがたいご回答をいただきました。
※ヤマトビジネスメンバーズは伝票印刷が楽になる「送り状発行システムB2」があるので、ヤマト運輸を使っている法人様の多くはすでに利用されていることが多いです。
ということでクライアント様経由でデータを入手。
ただしデータの仕様は公開されていないということで
「まぁ見ればわかるか!」
と楽観的にデータをテキストエディタで開きましたが
※データの公開禁止といった規約は見つかりませんでした
謎の番号の羅列。。。正直甘く見てました。
ということで、今回はこのデータを見てわかったことをレポートするという内容となっております。
なお全体的にはわかっていないことが多いのですが、とりあえず発送元と発送先の郵便番号を入れたら、配送にかかる日数/最短日の受取可能時間くらいは判定できるようになりました。
とりあえず2つのファイルの見方さえ分かれば何とかなります。
マスタパックには通常版と簡易版があります。
上記のテキストエディタで開いているファイルは通常版のYMSPOST.DATで、「郵便番号をキーにして仕分コードを求めるマスタ」ということです。
参考:ヤマトビジネスメンバーズのマスタパックの内容を教えてください。
YMSTPOST.DAT (通常版) 約7.2MB
まず図解。
1文字目:無視。全レコードで1
2文字目~:郵便番号(7桁)
12文字目~:仕分コード1つ目(7桁)
19文字目~:仕分コード2つ目(7桁)
これを元に読み解くと、1行目のレコードでは「郵便番号001-0000(札幌市)の仕分コード1は0005398, 仕分コード2は0005209」ということがわかります。
なぜ仕分コードが2つあるのかは全くわかりませんでしたが、少なくとも今回は 仕分コード2 だけを使います。
YMSTTIME.DAT(簡易版には含まれません)約18MB
このファイルは「時間帯判定サービスレベルマスタ :発ベースと仕分コードから最短配達日数、最短お届け時間帯を求めるマスタ」ということです。参考
ここでいうベースというのは各エリアの配送基地(=ベース)のようです。ベース毎に2~3桁の番号が割り振られています。詳しい説明はWikipediaにありましたので、見ると何番がどこなのかわかります。
仕分コード7桁のうち最初の3桁はこのベースの番号を示しています。
1文字目~:発ベースの番号(3桁)。発ベースとは発送する際に使われるヤマト基地の番号。
4文字目~:発送先の仕分コード(5桁)。YMSTPOST.DATで見つけた仕分コード2(7桁)のうち最初の5桁だけを使う。
10文字目~:配送にかかる日数(2桁)。02の場合は発送日の翌日届く。
※発送日と配達日で計2日と計算しているようだ。
12文字目~:最短到着日の何時から受取可能かを示す(2桁)。08の場合午前8時から。08,14,16,18,99の値がある。99は受取時間指定不可。
14文字目~:最短到着日の何時まで受取可能かを示す(2桁)。たいてい20となっていて20時まで。99は受取時間指定不可。
以上でとりあえず何とかなります。
実際に例を挙げて探してみましょう。
例)鳥取県米子市〒6830851 → 熊本県天草市〒8616301に発送したい場合
1. 発送元のベース番号を調べる
YMSTPOST.DATを参照し、6830851 を探す。仕分コード2が 0772200。
その先頭3文字のベース番号で 077。
2. 発送先の仕分コード2を調べる
YMSTPOST.DATを参照し、仕分コード2が 0943100。
※2024.1.26公開のマスタパックでは、仕分コード1(ここでは0943124)を使うようになっていました。
3. 検索キーを合成する
1のベース番号3桁+2の仕分コードの先頭5桁を繋ぐ。
077 + 09431 で 07709431。
4. YMSTTIME.DATから検索キーを使い該当レコードを探す
下図のように、日数2日間(つまり発送の翌日着)で18~20時までの時間帯で受取が可能とわかる。
5. 公式サイトで答え合わせ
はい、これでデータの意味が最低限わかるようになりましたね!
あとはこれをシステム化しますが割愛。
TEXT by
松本 博之(まつもとひろゆき)
1978年、鳥取県米子市生まれ。
株式会社マジックワード WEBシステムの開発・運用を担当。
WordPressの実績多数。表面的な使用方法を把握するだけでなく、WordPressのソースコードを読み解いて対応できます。
国家資格の応用情報処理技術者をなんとなくとりました。