2009-09-07
■[Ruby][Rails]路線・駅データの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!!
そのうち関連する駅のグループも変換したいな…。
トラックバック - http://d.hatena.ne.jp/cazzie/20090907/1252342303
リンク元
- 6 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=4Br&q=struts2+iterator&btnG=検索&lr=lang_ja
- 3 http://www.google.co.jp/search?hl=ja&q=struts2+iterator&lr=
- 3 http://www.google.co.jp/search?hl=ja&safe=off&client=firefox-a&rls=org.mozilla:ja:official&hs=oib&num=50&newwindow=1&q=mysql+innodb+有効&btnG=検索&lr=lang_ja
- 3 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGLL_jaJP332JP332&q=struts2+s:fielderror
- 2 http://b.hatena.ne.jp/TrinityT/20090105
- 2 http://d.hatena.ne.jp/kazkun/20090320/1237553236
- 2 http://d.hatena.ne.jp/notify-Notify_user_ifilter?aHR0cDovL2QuaGF0ZW5hLm5lLmpwL2NhenppZS8yMDA4MDIwNS8xMjAyMjI4MzIy
- 2 http://www.google.co.jp/search?hl=ja&lr=lang_ja&client=firefox-a&rls=org.mozilla:ja:official&q=teraterm+マクロ+ssh&revid=1155088216&ei=ui-mSo-BOsODkAWa8vGLCQ&sa=X&oi=revisions_inline&resnum=0&ct=broad-revision&cd=1
- 2 http://www.google.co.jp/search?hl=ja&source=hp&q=java+class+確認&lr=&aq=f&oq=
- 2 http://www.google.co.jp/search?hl=ja&source=hp&q=x-windows-iso2022jp&btnG=Google+検索&lr=lang_ja&aq=f&oq=

