路線・駅データのyml生成
駅、路線データを無償提供しているサイト「駅データ.jp」さんがあったのでrubyでデータを変換してymlに出力してみた。
出力データに合致するDBスキーマがあれば「rake db:fixtures:load」でDBに一発でロードできます。
「駅データ.jp」さん最高です!
- やり方
データを上記サイトの「ダウンロード」からファイルをダウンロードして解凍します。
解凍されたデータm_stations.csv(EUC)をnkfでutf8に変換しstation.csvという名前で保存する。
nkf -w m_staions.csv > station.csv
fastercsvを使っているのでインストールしていなければ
gem install fastercsv
後は後述のコードをUTF8にしたCSVと同じディレクトリで実行するだけ。
- 入力データ station.csv
- 出力データ stations.yml(駅), railroad_lines.yml(路線)
#!/usr/bin/env ruby require "rubygems" require "fastercsv" COLLECT_LIST = [ "JR山手線", "東急目黒線", "東京メトロ南北線", "都営三田線" ] station_list = Array.new station_id = 0 railroad_list = Array.new railroad_id = 0 FasterCSV.foreach("station.csv") do |row| railroad = row[8] if COLLECT_LIST.include? railroad station = row[9] railroad_item = { :label => railroad_id, :id => railroad_id, :name => railroad} unless railroad_list.include? railroad_item railroad_id = railroad_id + 1 railroad_item[:label] = railroad_id railroad_item[:id] = railroad_id railroad_list.push railroad_item end station_id = station_id + 1 station_list.push({ :label => station_id, :id => station_id, :name => station, :railroad_id => railroad_id}) end end File.open("stations.yml", "w") do |file| station_list.each do |item| file.puts item[:label].to_s + ":" file.puts " id: " + item[:id].to_s file.puts " name: " + item[:name] file.puts " railroad_line_id: " + item[:railroad_id].to_s end end File.open("railroad_lines.yml", "w") do |file| railroad_list.each do |item| file.puts item[:label].to_s + ":" file.puts " id: " + item[:id].to_s file.puts " name: " + item[:name] end end
出力結果
stations.yml
1: id: 1 name: JR山手線 2: id: 2 name: 東急目黒線 3: id: 3 name: 東京メトロ南北線 4: id: 4 name: 都営三田線
railroad_lines.yml
1: id: 1 name: 大崎 railroad_line_id: 1 2: id: 2 name: 五反田 railroad_line_id: 1 3: id: 3 name: 目黒 railroad_line_id: 1 4: id: 4 name: 恵比寿 railroad_line_id: 1 5: id: 5 name: 渋谷 railroad_line_id: 1 以下省略
出力する路線を増やしたい場合はCOLLECT_LISTの項目を足せばOK!!
そのうち関連する駅のグループも変換したいな…。