そういや、もうだいぶ前に作ったNextTrainのデータが現状にあってないなとおもって作り直そうとおもった。
(参考記事 : NextTrainでもしっかり到着時間知りたいの)
2009年の3月に作った時に正しい到着時間が分かるように工夫をしたNextTrainのデータを用意したと書いてある。
データはスクレイピングで取ってきて、それでそこから発着時刻をまとめて処理したとある。
まぁ基本的にはこの考え方で行こうと思った。ちょうどPerlにはWeb::Scraperなんて便利なものがあるので、これを使えばいい。
えきから時刻表 から引っ張ってこようかなと思った。どこでもよいといえばよいのですが。
これでそのまま作ってもよいのですが、それだけではおもしろくないのでもうひと工夫しようと思った。
そこでやりたいことは目的地に行くのに適当な列車だけ抜き出して時刻表を構成することだ。
例えば上本町から名張に行くことを考える。
上本町の時刻表を見ると種別も行き先もいろいろだけど、名張まで行くことが出来る電車は限られる。
しかもだいたい名張行きの準急があっても、それは途中で区間快速などに抜かされるから乗ってもほとんど意味がない。
それなら後の区間快速に乗った方がよい。
そういうことも踏まえて目的地に行くのに適当な列車のみ表示したいということだ。
そこで考えた方法は、まず出発地点の駅で遅く出発する列車から順に調べて行く。
そこで目的地への到着時刻を見て、それより遅く出発する列車より早く到着することができる列車のみ抜き出すという方法だ。
こうすれば目的地に早くつく列車だけ抜き出すことが出来る。
この列車の種別・行き先・必要な駅の発着時刻をファイルに書き出した。
ファイルへの書き出しへはData::Dumper使った。evalでデータ構造を復元できるから便利。
これでよさそうだが、実際にはなかなか難しい問題もある。
目的地への直通列車がないとか、途中の駅で乗り換えた方が早く到着する例もある。
これも考慮しなければ役に立つとは言い難い。
その乗り換え駅になりうる駅が直通列車含めて全て停車する駅なら、その駅までとその駅からのデータを用意して、
その2つのデータで乗り換えできるパターンを探して、そして合成した時刻表データを作れば良さそうだ。
これは必ず乗り換えが必要なルートでも応用できるから、乗り換えの列車がある列車だけ抜き出した時刻表が用意できる。
こんな風にできることは多そうだが、まずはNextTrainのデータにする前に列車情報をかき集めたデータを作ることをやってる。
これをさらにNextTrainのデータに変換する必要があるが、この最初に挙げた記事にも書いてあるけど、
本来はNextTrainは種別だけで所要時間が決まるような路線のためのもので、大きく所要時間が変わる路線には向かない。
記号の数が枯渇してなかなか思うようにいかないなんてことになる。
なのである程度は妥協が必要ではないのかなとも思っている。そこら辺のうまいやり方も考えていきたいなと思っている。