クロネコヤマトをCUIで追跡するコマンドを書いた

2021/01/03 追記

queueが自分で打っててめんどうだったのでlsに変えました


というわけでクロネコヤマトから情報を取ってくるツールを書きました。kuronekocatという名前です。

ほしかったthinkpadが届くまでひたすらクロネコヤマトの追跡ページをリロードしてたのでツールにしました。完全に自分が使う様です。

github.com

いますぐ

brewからとりましょう!!

$brew install anatofuz/kuronekocat/kuronekocat

使い方

基本的にはkuronekocat get <追跡番号>で情報が見れます。

+ikoma+anatofuz$ kuronekocat get 301905465514
+--------------+---+------------+-------+-------+------------------------+--------------+
|   伝票番号   | # |  荷物状況  | 日 付 | 時 刻 |        担当店名        | 担当店コード |
+--------------+---+------------+-------+-------+------------------------+--------------+
| 301905465514 | ↓ | 荷物受付   | 12/28 | 18:50 | 新東京法人営業支店     |       036600 |
+              +---+------------+-------+-------+------------------------+--------------+
|              | ↓ | 発送       | 12/28 | 18:50 | 新東京法人営業支店     |       036600 |
+              +---+------------+-------+-------+------------------------+--------------+
|              | ↓ | 作業店通過 | 12/28 | 20:53 | 羽田クロノゲートベース |       032990 |
+              +---+------------+-------+-------+------------------------+--------------+
|              | ↓ | 作業店通過 | 12/29 | 04:05 | 羽田空港ベース店       |       419990 |
+              +---+------------+-------+-------+------------------------+--------------+
|              | □ | 配達完了   | 12/30 | 11:17 | 中城センター           |       098161 |
+--------------+---+------------+-------+-------+------------------------+--------------+

伝票番号いちいち覚えてられないので、addでキューに追加できます。 追加時はオプションとして説明文をexplainに続いて入力できます。

$kuronekocat add --number 301905465514 --explain thinkpad

キューの一覧はqueueで確認できます。

$ kuronekocat queue
+--------------+--------------+
|     品物     |   追跡番号   |
+--------------+--------------+
| 624158714325 | 624158714325 |
| thinkpad     | 301905465514 |
+--------------+--------------+

キューに入ってるものはgetコマンドから打ちで表示されます。

+ikoma+anatofuz$ kuronekocat get
+--------------+--------------+---+----------------------------+-------+-------+----------------------------------+--------------+
|     品物     |   伝票番号   | # |          荷物状況          | 日 付 | 時 刻 |             担当店名             | 担当店コード |
+--------------+--------------+---+----------------------------+-------+-------+----------------------------------+--------------+
| 624158714325 | 624158714325 | ↓ | 発送                       | 12/28 | 16:21 | 長田センター                     |       098123 |
+              +              +---+----------------------------+-------+-------+----------------------------------+--------------+
|              |              | ↓ | 陸・海上切替え             | 12/28 | 16:37 | 長田センター                     |       098123 |
+              +              +---+----------------------------+-------+-------+----------------------------------+--------------+
|              |              | ↓ | 依頼受付(日・時間帯変更) | 12/28 | 19:13 | 新宮城主管支店 サービスセンター |       113005 |
+              +              +---+----------------------------+-------+-------+----------------------------------+--------------+
|              |              | □ | 陸・海上切替え             | 12/29 | 22:37 | 沖縄ベース                       |       098990 |
+--------------+--------------+---+----------------------------+-------+-------+----------------------------------+--------------+
| thinkpad     | 301905465514 | ↓ | 荷物受付                   | 12/28 | 18:50 | 新東京法人営業支店               |       036600 |
+              +              +---+----------------------------+-------+-------+----------------------------------+--------------+
|              |              | ↓ | 発送                       | 12/28 | 18:50 | 新東京法人営業支店               |       036600 |
+              +              +---+----------------------------+-------+-------+----------------------------------+--------------+
|              |              | ↓ | 作業店通過                 | 12/28 | 20:53 | 羽田クロノゲートベース           |       032990 |
+              +              +---+----------------------------+-------+-------+----------------------------------+--------------+
|              |              | ↓ | 作業店通過                 | 12/29 | 04:05 | 羽田空港ベース店                 |       419990 |
+              +              +---+----------------------------+-------+-------+----------------------------------+--------------+
|              |              | □ | 配達完了                   | 12/30 | 11:17 | 中城センター                     |       098161 |
+--------------+--------------+---+----------------------------+-------+-------+----------------------------------+--------------+

受け取った場合はreceiveでキューから消します。伝票番号でも商品名でもokです。

+ikoma+anatofuz$ kuronekocat queue
+--------------+--------------+
|     品物     |   追跡番号   |
+--------------+--------------+
| 624158714325 | 624158714325 |
| thinkpad     | 301905465514 |
+--------------+--------------+

$ kuronekocat receive thinkpad
$ kuronekocat queue
+--------------+--------------+
|     品物     |   追跡番号   |
+--------------+--------------+
| 624158714325 | 624158714325 |
+--------------+--------------+

くりかえし

brewにも登録しています。どうぞお使いください。

$brew install anatofuz/kuronekocat/kuronekocat

実装について

自分が作る前にあるものを使うと楽なので、GitHubを探しました。 見たところ1件それっぽいのがヒットしました。

github.com

しかしこれはpython実装となっていて、いくつかのライブラリをinstallする必要があります。 作業環境をmacOSから変更しようとしてたこともあり、シングルバイナリでの再実装を検討しました。

となってくるとRustかgolangですが、どうせHTTPを叩く必要があるのでそこまで速度も必要なさそうなので、golangを今回選択しました。 あとはCLIツールを使うならおなじみcobraを使ってエイヤで書きました。

内部は単純にクロネコヤマトの追跡ページにpostして、それをパースする感じです。 追跡ページはGoogle検索の結果出てくるページと、ヤマトのCGIのページの2種類あるのですが、前者の方はgetでいけるもののクエリパラメータによくわからんキーが入っていたので断念しました。その為素朴にpostしています。この際Shift-JisでHTMLが返ってくるので、気合でutf8に変換するなどをしています。

かなりやっつけで書いたので色々と雑な実装すが、まぁ使う分には問題ないので...

今回はGitHub releaseを使ったりhomebrewで配布をしたかったのですが、Twitterで教えてもらったgoreleaserを利用しています。かなりぱぱっと出来て便利でした。

github.com

というわけでどうぞお使いください。READMEは後ほど書きます