Suicaの利用履歴を読み込み、入場駅やためていたデータの履歴を表示するところまでをとりあえずやってみたので、手順をまとめておきます。
お願い
僕はPythonをほとんど触ったことがないので、ライブラリの利用方法や読み込みなどあまり理解していないので、温かい目でみていただき、間違った部分があれば指摘していただければ嬉しいです。
用意するもの
- macOS High Sierra(たぶん他でも大丈夫です)
- PaSori RC-S380)
- Suica(Pasmoでも問題なかったです)
ソニー SONY 非接触ICカードリーダー/ライター PaSoRi RC-S380
- 出版社/メーカー: ソニー(SONY)
- 発売日: 2012/10/10
- メディア: Personal Computers
- 購入: 5人 クリック: 9回
- この商品を含むブログ (18件) を見る
PaSoRiはICカードリーダーでよく見るのでこれにしてみました。
nfcpy
今回は nfcpy
というライブラリを利用します。
https://nfcpy.readthedocs.io/en/latest/index.html
NFC(Near Field Communication)で受け取った生データを読み込んで出力するためのライブラリのようです。
こちらを使います。
python3.x系への対応はまだらしく、2.x系を利用します。
python & pipの準備
僕は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の利用履歴です。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 # ディレクトリ名を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
がコミュニティーの有志によって作成されたものらしく、最新のものではないのか、完全ではないようです。
まとめ
- Suicaの利用履歴が読み込めました
- Pythonのエコシステムについて詳しくなかったためハマりました
- Raspberry Piを購入したのでこれを使って楽しめたらなというのが今後の展望です