Suicaの利用履歴を読み込み、入場駅やためていたデータの履歴を表示するところまでをとりあえずやってみたので、手順をまとめておきます。
お願い
僕はPythonをほとんど触ったことがないので、ライブラリの利用方法や読み込みなどあまり理解していないので、温かい目でみていただき、間違った部分があれば指摘していただければ嬉しいです。
用意するもの
PaSoRiはICカードリーダーでよく見るのでこれにしてみました。
nfcpy
今回は nfcpy
というライブラリを利用します。
https://nfcpy.readthedocs.io/en/latest/index.html
NFC(Near Field Communication)で受け取った生データを読み込んで出力するためのライブラリのようです。
こちらを使います。
python3.x系への対応はまだらしく、2.x系を利用します。
僕はHomebrewにてpython2系をインストールしました。
$ brew install python@2
...(略)...
$ which python2
/usr/local/bin/python2
$ which pip2
/usr/local/bin/pip2
pip(pythonのパッケージ管理ツール)も一緒に入ります。
その他の必要な環境を準備
USB読み込み系
PaSoRiはUSBデバイスなのでそれを扱うためのライブラリをインストールしておきます。
$ brew install libusb
$ brew install libusb-compat
$ sudo pip2 install pyusb libusb1 pyserial
OpenSSL
を新しくする
macOSに標準で入っているOpenSSL
はバージョンが古いらしく、下記の方法で新しくします。
$ brew install openssl
$ ln -s /usr/local/opt/openssl/bin/openssl /usr/local/bin/openssl
$ ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/libcrypto.dylib
$ ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/libssl.dylib
バージョン管理ツールBazaar
nfcpy
を利用するための方法は、 Bazaar
というgitのような分散型のバージョン管理ツールを利用することが公式で紹介されています。
このツールはHomebrewで入れることができます。
$ brew install bzr
nfcpy
を利用する
まず、Bazaar
でnfcpy
を落とします。
trunk
というディレクトリにnfcpy
のライブラリのリポジトリが落とせます。
$ bzr branch lp:nfcpy trunk
$ cd trunk
$ tree -L 1
.
├── HISTORY.rst
├── LICENSE
├── README.rst
├── docs
├── examples
├── nfc
├── setup.py
├── tests
└── tools
examples
以下にこのライブラリを用いたサンプルがあるので、実行してみます。
まず先にmacにPaSoRiを接続しておきましょう。
$ python2 examples/tagtool.py
[nfc.clf] searching for reader on path usb
[nfc.clf] using SONY RC-S380/P NFC Port-100 v1.11 at usb:020:025
** waiting for a tag ** <<< ここで入力待ちをするのでICカードをPaSoRiに近づけます
Type3Tag 'FeliCa Standard (RC-S???)' ID=**************** PMM=**************** SYS=0003
これでFeliCa対応のカードの情報を取得することができました。
↑は
- IDm (製造ID/Manufacture ID)
- PMm (製造パラメータ/Manufacture Parameter)
だそうです。
さて、本題のSuicaの利用履歴です。Suicaは過去20件の利用履歴が取り出せるようになっています。
nfcpy
を利用してSuicaの情報を取得し、生データをパースして見やすくしてくれているライブラリが以下です。
https://github.com/m2wasabi/nfcpy-suica-sample
中を見ていただければわかりますが、StationCode.csv
というところに、生データと駅との組み合わせがあり、それによって入出場駅を出力できているようです。
clone
このリポジトリを任意の場所にcloneし、中でnfcpy
を落としてきます。
その際ディレクトリ名をnfcpy
にしているのを間違えないようにします。
$ git clone git@github.com:m2wasabi/nfcpy-suica-sample.git
Cloning into 'nfcpy-suica-sample'...
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 13 (delta 3), reused 13 (delta 3), pack-reused 0
Receiving objects: 100% (13/13), 65.33 KiB | 484.00 KiB/s, done.
Resolving deltas: 100% (3/3), done.
$ cd nfcpy-suica-sample
$ bzr branch lp:nfcpy nfcpy
Not checking SSL certificate for xmlrpc.launchpad.net.
You have not informed bzr of your Launchpad ID, and you must do this to
write to Launchpad or access private data. See "bzr help launchpad-login".
Branched 284 revisions.
そして、直下あるsuica_read.py
を実行します。
python2 suica_read.py
Type3Tag 'FeliCa Standard (RC-S???)' ID=**************** PMM=**************** SYS=0003
=== 00 ===
端末種: None
処理: 物販
日付: 18-11-02
入線区: None-None
入駅順: None
出線区: None-None
出駅順: None
残高: 1734
BIN:
c7 46 00 00 25 62 6e a7 d0 59 c6 06 00 03 4a 00
=== 01 ===
端末種: 改札機
処理: 運賃支払
日付: 18-11-01
入線区: *********
入駅順: ***
出線区: *********
出駅順: ***
残高: 2643
BIN:
16 01 00 02 25 61 e0 09 e4 3e 53 0a 00 03 49 00
...(略)...
=== 19 ===
端末種: 改札機
処理: None
日付: 18-10-25
入線区: *******
入駅順: ***
出線区: *******
出駅順: **
残高: 3958
BIN:
16 14 02 01 25 59 ce 25 00 00 76 0f 00 03 31 00
と20件のSuica利用履歴が出力されました。
端末機: 物販
などはコンビニで利用したときのもののようです。
また、 StationCode.csv
がコミュニティーの有志によって作成されたものらしく、最新のものではないのか、完全ではないようです。
まとめ