スキップしてメイン コンテンツに移動

投稿

ラベル(FeliCa)が付いた投稿を表示しています

12年前の非接触型ICカードリーダPaSoRiで遊ぶ

最近ずっとリモートワークだったので、これを機に書斎の整理整頓を行った。段ボールに無造作に放り込まれたPC関連機器や電子ガジェットを漁っていると、2004年10月に発売されたソニーの非接触型ICカードリーダPaSoRi RC-S320が出てきた。2008年3月に購入したので実に12年以上前のモノだ。 このまま捨て置くのは勿体ないし、ちょっと興味をそそられたので、 以前のブログ記事 に上げた コード がちゃんと使えるか、最近新調したWindows 10搭載PCで確認してみた。 当然、ドライバが入っていないのでそのままでは動かない。早速最新のドライバを入れようと思ったが、実はRC-S320はとっくに販売終了していて、新しいPaSoRiとはドライバが違う。まあ、そりゃそうか。調べたところ古いドライバ( NFCポートソフトウェア Version 5.4.8.6 )を落としてくれば動くことが分かった。動作確認環境はWindows 8.1までみたいだけど、まあ、大丈夫でしょ。 ドライバを入れたところ、デバイスマネージャーでちゃんと認識された。よし、これで準備OKだ。動かしてみよう! …いやまてよ? 今時Python2は許されない。ということでPython3のコードにちょこちょこっと修正して、これで良し。PaSoRiの上にモバイルSuica機能を搭載したAndroid端末を置いて、さっそく実行 python read_felica.py (カタカタカタッターン!) OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。 あ、これよく見るやつだ。実行パス名にスペースとか入ってちゃんと認識しないやつだ。と思ったけど調べてみるとパス名は問題ないみたい。あとは、そうそう、64ビット環境で32ビットのライブラリ使ったとか。それだ! 実行環境はPython3の64ビット版なので読み込むDLLも64ビットじゃないと。でも、利用させてもらった felicalib は32ビット版しかないみたい。 0.4.3から64ビット版にも対応する みたいだけど、最新版の0.4.2が2008年6月リリースでそれ以降出ていないということはもう出ない可能性が高い。ちなみにソニーのドライバは当時64ビット版が存在しなかったみたいだけど、今...

Python: PaSoRiでSuicaの履歴を読み出す・その後

以前、 PaSoRiでSuicaの履歴を読み出す という記事を書いたけど、酷いバグを見つけた。物販で購入時の時刻を間違えるというもの。言い訳になるが、つい最近まで古いSuicaを使っていて、駅の自販機などでSuicaが使えず、テストしていなかったのだ。申し訳ない。 と云うわけで、修正したソースを公開しておく。バグだけ修正しても面白くないので、少し改良した。以前は残高しか出なかったが、使用した金額も併せて表示するようにした。また、以下に示す出力のように日時が先頭に来るように変更した。等々。 2008年xx月xx日 ○○駅 ××駅 540円 4160円 改札機 運賃支払(改札出場) 2008年xx月xx日 ○○駅 +2000円 6160円 券売機等 チャージ 2008年xx月xx日 xx時xx分xx秒 買物 120円 6040円 自販機 物販 以下、ソースコード。まだテストが足りないのでバグがあるかもしれない。見つけ次第、訂正する。 #!/usr/bin/env python # -*- coding: shift_jis -*- """ read_felica.py version 0.02 by nox Suicaの履歴を出力するプログラム. """ from ctypes import * POLLING_ANY = 0xffff POLLING_SUICA = 0x0003 POLLING_EDY = 0xfe00 SERVICE_SUICA = 0x090f SERVICE_EDY = 0x170f # 端末種 TERMINAL = {3: "精算機", 4: "携帯型端末", 5: "車載端末", 7: "券売機", 8: "券売機", 9: "入金機", 18: "券売機", 20: "券売機等", 21: ...

Python: PaSoRiでSuicaの履歴を読み出す

Rubyを使ってPaSoRi経由でSuicaの乗車履歴を取得し、GoogleMapsやGoogleEarthで表示する って記事でPaSoRiなるものを知った。Edyもオサイフケータイも使ってないし、FeliCaについてはまったく興味がなかったのでスルーしてたんだけどこれは面白そう。早速、 SONY RC-S320 非接触ICカードリーダ/ライタ PaSoRi 「パソリ」 を買ってきていじってみた。因みに値段は約3000円。 まず、PaSoRiを読み出すためのライブラリとして felicalib や libpasori などがあったのでこれらを調べてみると、どうやらPythonで利用するためにはCで拡張モジュールを書かないとダメそうで、ちょっと面倒だなと思っていたが、 FeliCa の Id を python で読む というページを見つけて、Pythonのctypesモジュールを使えば拡張無しでできそうなことを知る。 で、上記のサイトなどを参考にざざっとプログラムを書いてみた。ライブラリはWindowsを使っていることもあってfelicalibを選択。プログラムを実行させるには、このライブラリと駅コード情報が必要となる。 路線・駅コード一覧・登録 から、Excel形式ファイルを落としてきて、それの駅線・駅コード一覧のページをCSV形式に変換しておく(StationCode.csv)。店舗情報やバス情報の取得については、コードも増えるし面倒なので割愛。でも簡単に入れられるハズ。 実行すると以下のような履歴をすべて出力する。 改札機 運賃支払(改札出場) 2008年01月14日 赤羽駅 王子駅 8920円 改札機 運賃支払(改札出場) 2008年01月14日 王子駅 赤羽駅 9070円 ああ、面白かった。以下、ソース。 追記: バグ修正改良版については、 Python: PaSoRiでSuicaの履歴を読み出す・その後 を参照のこと。 #!/usr/bin/env python # -*- coding: shift_jis -*- """ read_felica.py by nox Suicaの履歴を出力するプログラム. """ from ctypes import * P...