TrainTimerを延命してみる
かつてandroid用に「TrainTimer」という便利なアプリがありました。
各駅の時刻表を登録しておくと「次の列車まであと何分」というのがすぐにわかるというものです。
大昔の「Palm」というガジェットのころからこういうアプリはありましたが、当時は「時刻表データを自作する」というけっこうな手間があってそれなりに面倒でした。
PC用の変換アプリケーションとかWeb上での変換サービスとかいろいろ出てきたように思います。
この「TrainTimer」は時刻表データをネットから引っ張ってこれるので非常に簡単に使えるのと、画面も見やすいので重宝していました、
そんな便利な「TrainTimer」でしたが、どうやら何年か前に開発・公開が終了していたようです。
それでもアプリのパッケージは確保していたのでインストールはできましたし、時刻表データもバックアップがあったのでその後も使い続けることはできていました。
少々遠くまで行く時はあらかじめ経路検索してしまうので「次の電車(バス)は?」
と急に確認するケースが私の場合それほど多くないと言うこともありましたが。
通勤も徒歩なので。
ところが、最近になって使っているバスのダイヤ改正があったので時刻表の更新を試みたのですが、どうも時刻表が更新されません。
そこで改めて色々試してみると、更新処理をしても時刻表が更新されないとか新規に時刻表が追加できないとか、結構実用上問題になることが色々出ているのに今更気がつきました。
まあとっくに開発終了しているのでそれは仕方ないとして、乗り換え先アプリを探してみます。
昔は「オフラインで見られる」という事が大きなメリットだったわけですが今となっては「別に検索アプリとかサイトで見ればいいんじゃね?」という風に世の中が進化したためかなかなか適当な乗り換え先が見つかりません。
オフラインビューワーならではの軽快感というか使い勝手というか、そういうのは遠い昔の話のようです。
手元にアプリはある。
実際にインストールも起動もできる。
今までの時刻表データもある。
ということは、自分で時刻表データさえ更新できれば何の問題も無いわけです。
ならば自分でやってみます、多少方法がまわりくどかろうと。
「TrainTimer」のデータは拡張子が「.dat」ですが実態はテキストファイルです。
試しにスマホの中のデータを開いてみていじってみたら、アプリで見た時に反映されていたのでこれをどうにかすれば良いと言うことは確実です。
となると、
「なんらかの方法」で時刻表データを取得してきて、
「なんらかの方法」で「TrainTimer」の形式に変換して、
スマホの所定の場所に放り込めばいいだけです。
まあ結果的に実際はそう簡単な話じゃ無かったんですけど。
まずは時刻表を取得します。
面倒なので「TrainTimer」が元々取得元として使用していた「Yahoo!路線検索」の時刻表データを使います。
取得したい駅の時刻表ページのURLさえわかればOKです。
路線、方面、平日/休日など枝分かれがあるのでそれぞれ取る感じですね。
取得の方法に関しては「Webスクレイピング」で検索すれば山ほど出てくるので、その辺からちょちょっと拝借します。
Excelのワークシートで指定した駅の時刻表を取得する感じです。
例によって具体的な詳細は省きます。
取得できたら後は従来のデータを参考に時刻表データを組み立てて、拡張子「.dat」のテキストファイルとして保存します。
その辺はVBAなんでちょちょいっと。
ちなみに、「TrainTimer」で自動作成した時刻表データには何故かデータ内に駅名とか方面とかが書かれていません。
ファイル名も「数字.dat」という感じなのでどのデータがどの時刻表かわかりません。
中にURLは書かれているのでそこにアクセスすればわかる話ではありますが、それだと今後のメンテナンスが面倒なのでファイル名を「駅名+方面」にしてみました。
アプリから認識されませんでした。
どうやら駅名などの情報と時刻表データは別にどこかで管理して紐付けているようです。
そう思って「バックアップ」としてエクスポートしたzipファイルの中を見ていると、「TrainTimer.db」というファイルがありました。
なるほどそういうことか。
とりあえずテキストエディタで開いてみます。
なんだかよくわからない文字列がちょろっと見えるだけでした。
ただ、「SQLite format」と最初に書いてあるので、そちらから攻められそうですね。
Windows用の「DB Browser for SQLite」というアプリがあったので試してみます。
これでSQLiteのDB内を直接見ることができます。
「TrainTimerData」というテーブルにファイルの番号と路線、駅名、方面などの紐付けがされていました。
このデータをそのまま使うことにします。
データをエクスポートして先ほどスクレイピングに使ったExcelにぶち込んで、各データを既定の番号のファイル名で出力するように変更しました。
確認のため、現在のデータをすべてバックアップをとった上で一旦削除します。
まっさらになったところで取得・変換した時刻表データと先ほどの「TrainTimer.db」をzipで圧縮してひとまとめにして、「TrainTimer.zip」という名前で所定のフォルダに入れます。
アプリの設定から「バックアップから復元」を選びます。
アプリで時刻表の一覧を見ると、見事に時刻表が復活していました。
さっそく時刻表を見てみます。
何故だ…。
ふと気がついて確認すると、新しく変換した時刻表ファイルの文字コードが「Shift_JIS」、元々の時刻表ファイルの文字コードが「UTF-8N」。
そりゃ駄目だ。
変換側の仕組みをいじってデータを「UTF-8N」で出力するように変更します。
改めて入れてみます。
復活!!
一回PCを使わないといけないとか、新規で時刻表を作る時にはDB側をいじらないといけないなどの問題はありそうですが、とりあえず今まで使っていた時刻表を「最新」の状態で使い続けることはできそうです。
ダイヤ改正なんてそんなにしょっちゅうするものでもないので、とりあえずこれで運用して、今後の課題としてDB側との連携を考えたいと思います。
ちなみにバスの時刻表は早々に諦めました。
今回は電車だけどうにかなればOK。
バスはこっちのアプリで我慢します。
バスに限ればこれはこれでそこそこ使い勝手が良いです。