タグ

rubyとsuicaに関するkei-sのブックマーク (3)

  • Ruby で PaSoRi 使ってみる

    Ruby にはダイナミックリンカへのインターフェースが用意されているのでこれを利用してみます。 DL::Importable を利用しヘッダファイルを参考にしながらライブラリ関数に対してラッパーメソッドを定義していきます。 pasori.rb require 'dl/import' module Pasori extend DL::Importable dlload '/usr/local/lib/libpasori.dylib' typealias 'uint8', 'unsigned char' typealias 'uint16', 'unsigned int' #typealias 'uint16', 'unsigned short int' # libpasori.h extern 'pasori* pasori_open(char*)' extern 'void pasori_

  • Ruby で Suica を覗いてみる

    以下を参考に Suica のデータを具体的に解析してみましょう。 最初の1バイトが 0x1B だとクレジット入金、0x07 or 0x08だと入金、0x46だとサンクスチャージの入金で、0x16が自動改札乗降、0xC7が購買のようです。5バイト目から2バイトが日付で、先頭から7ビットが年、4ビットが月、残り5ビットが日のようです。(ここが面倒でしたね。パズルみたい)7バイト目からの2バイトが入った駅、続く2バイトが出た駅がコードで入っています。駅のコードは、路線コード/駅コードの組合わせで、有志によるデータベースが公開されています。IC SFCard Fan DB Srevice このソフトではコードからの変換はしていません。12バイト目から2バイトが残金(リトルエンディアン)です。 160100020e98e376e37d2e2200008000 を例として詳しく見ていくと以下のようにな

  • Rubyを使ってPaSoRi経由でSuicaの乗車履歴を取得し、GoogleMapsやGoogleEarthで表示する

    #include #include "libpasori.h" int main(void) { pasori *p; felica *f; uint8 d[16]; p = pasori_open(NULL); pasori_init(p); f = felica_polling(p, 0xfe00, 0, 0); felica_read_without_encryption02(f, 0x170f, 0, 0, d); printf("%d¥n", d[14]*256+d[15]); pasori_close(p); return 0;} require 'dl/import' module Pasori extend DL::Importable dlload '/usr/local/lib/libpasori.dylib' typealias 'uint8', 'unsigned

  • 1