駅データ.jpにて全国の駅データをcsvで無料ダウンロードできるが、残念なことに駅名の読み方(ふりがな)は有料版でしか付いてこない
4000円払うのもうーんって感じなので我らのWikipediaから抽出できないかやってみた。
相月駅(あいづきえき) 会津高原尾瀬口駅(あいづこうげんおぜぐちえき)
のようなやつは駅(*)で正規表現で抽出すればおkだけど
愛野駅 (静岡県)(あいのえき・東海旅客鉄道東海道本線) 愛野駅 (長崎県)(あいのえき・島原鉄道)
とか
あかぢ駅#ふりがななしver 曙町東町停留場(あけぼのちょうひがしまちていりゅうじょう) #語尾が停留場
とか例外が多くて苦労した 以下スクリプト
require 'nokogiri' require 'open-uri' require 'json' result = [] parent = Nokogiri::HTML(open('http://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E3%81%AE%E9%89%84%E9%81%93%E9%A7%85%E4%B8%80%E8%A6%A7')) links = parent.xpath('//a')#全リンク取得 links.each do |link| url = link.attr("href") if(!url.nil? && url.include?("%E6%97%A5%E6%9C%AC%E3%81%AE%E9%89%84%E9%81%93%E9%A7%85%E4%B8%80%E8%A6%A7_"))#「日本の鉄道駅一覧_」を含むリンク対象 html = Nokogiri::HTML(open("http://ja.wikipedia.org#{url}")) html.css('li').each do |str| if name = str.text.match(/(.+[駅|停留場]).*((.+))/) result << {name[1] => name[2].match(/(.+[えき|じょう]).*/){$1}} #ひらがなのみ等ふり仮名を振られていない駅名対策 elsif name = str.text.match(/(.+駅)$/){$1} result << {name => name.gsub(/駅$/, "えき").tr("ァ-ン", "ぁ-ん")} end end end end #要対策 括弧が全角スペースの駅 result << {"安針塚駅"=>"あんじんづかえき"} result << {"福生駅"=>"ふっさえき"} result << {"花山駅"=>"はなやまえき"} File.write('result.json', JSON.pretty_generate(result.uniq))