久しぶりに郵便番号→住所変換の機能が必要になったので、API的なものを自前で作ろうと思って公式のデータを加工するスクリプトを書いたのですが、zipcloudというサービスが無料で使えそうなので一旦これを利用させて貰うことにしました。
せっかく書きかけたので、スクリプトを掲載。GitHub Copilotがほぼ書いてくれました。特に「以下に掲載がない場合」と入っている場合の整形方法など、最初は「なんのこっちゃ?」と思ったのですが、先述のzipcloudでも同じ加工をしていると書かれてるんですね。ウェブの情報をしっかり学習してる…!と感動しました。
require 'csv'
require 'json'
ken_all_path = ARGV[0] || 'KEN_ALL.CSV'
unless File.file?(ken_all_path)
puts "KEN_ALL.CSV not found"
exit 1
end
csv = CSV.read(ken_all_path, encoding: 'Shift_JIS:UTF-8')
json = {}
simple_tsv = ""
csv.each do |row|
town = row[8]
if town.include?("以下に掲載がない場合") \
|| town.include?("の次に番地がくる場合") \
|| town.match?(/.+一円$/)
town = ""
end
json[row[2]] = {
prefecture: row[6],
city: row[7],
town: town,
# prefecture_kana: row[3],
# city_kana: row[4],
# town_kana: row[5],
}
simple_tsv += "#{row[2]}\t#{row[6]}\t#{row[7]}\t#{town}\n"
end
IO.write("ken_all.json",JSON.pretty_generate(json))
IO.write("ken_all.tsv",simple_tsv)