都道府県・市区町村データをどうするか
最終更新から6年以上たっています。ライブラリのバージョンや手順が変わっている可能性があります。
よくある都道府県を選択後に、対象都道府県の市区町村がプルダウンで出てくるのを作る事になった。
方法としては2つ。
1.自前DBにデータとAPIを用意する
2.公開されているAPIを使用する
過去に作った事が有るのは1の場合。
郵便番号を入れたら住所が自動入力されるやつで、日本郵便のデータを使ったやつだった。
今回は市区町村までしか要らないので、以下の公開APIの使用を検討。
最初は登録しなくても使える国交省の方を使おうかと思ったけど、政令指定都市のデータが欲しいフォーマットじゃない。
例えば札幌市の場合、札幌市とその下の区が同じ扱いで出てきてしまう。
欲しいフォーマット
札幌市中央区
札幌市東区
・
・
・
紗那村
蘂取村
国交省のフォーマット
札幌市
中央区
東区
・
・
・
紗那村
蘂取村
内閣府の方は、欲しいフォーマットになっていて、更にbigCityFlagとやらで政令指定都市や東京23区等の区別まで出来るようになっている。
素晴らしい。こっちを採用。
後はAPIを直接使うのか、自前のDBに格納するかだけど、公開APIは公開業者の都合でいつ止まるか分からないのと、市区町村レベルまでであれば、そんなに頻繁に変更される事も無いだろうと思い、RESASのデータを叩いて自前DBに可能するrakeタスクを作成。
require 'net/http'
require 'json'
require 'uri'
namespace :resas_api do
desc "get pref data from resas-api"
task get_prefecture: :environment do
API_URL = 'https://opendata.resas-portal.go.jp/api/v1/prefectures'
json = get_data(API_URL)
json['result'].each do |pref_data|
Prefecture.create({pref_code: pref_data["prefCode"], pref_name: pref_data["prefName"]})
end
end
desc "get city data from resas-api"
task get_city: :environment do
API_URL = 'https://opendata.resas-portal.go.jp/api/v1/cities?prefCode='
Prefecture.all.each do |pref|
json = get_data("#{API_URL}#{pref.pref_code}")
json['result'].each do |city_data|
City.create({
pref_code: city_data['prefCode'],
city_code: city_data['cityCode'],
city_name: city_data['cityName'],
big_city_flag: city_data['bigCityFlag']
})
end
end
end
def get_data(url)
pp "URL : #{url}"
uri = URI(url)
req = Net::HTTP::Get.new(uri)
req['X-API-KEY'] = 'APIキー'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') {|http|
http.request(req)
}
JSON.parse(res.body)
end
end
ちなみに、最近ずっとreact-nativeをtypescriptで書いてたせいで、rubyの文法を忘れてしまい、defとかendを書き忘れたり、変数の前にletを書こうとしてしまったり、ちょっと混乱した…。
言語の文法は統一出来ないのだろうか…コンパイラなりインタプリタなりが対応すれば良いだけなのでは…。
自分では作れないけど、Googleとかに居る天才が何とかしてくれないものか(・・;)
あと、RESASの取り組み自体はだいぶ前に何かのニュースで知っていたけど、こうやって身近に使えるAPIも用意してくれてるのね。
国交省とダブってるのが勿体無いので、早く電子政府省でも作って効率的にやって欲しいものだ。
JavaScript・TypeScript の記事
コメントの受け付けは終了しました。ご意見・ご質問は X(@nm_aru)へどうぞ。



