#!/usr/bin/env ruby require 'csv' require 'json' require 'open-uri' require 'cgi' require 'pstore' # [yuzaaed.csv] # 施設名,設置場所,屋内外,住所,24h,,地図 baseurl = 'https://msearch.gsi.go.jp/address-search/AddressSearch?q=' cache = PStore.new("geoconv.pstore") aed = CSV.read(ARGV[0], headers:true) puts (aed.headers+["lon", "lat"]).to_csv.sub("施設名", "name") .sub("設置場所", "description") cache.transaction do cache["geodata"] ||= Hash.new geo = cache["geodata"] aed.each do |row| addr = row["住所"] if geo[addr] coord = geo[addr] else !geo[addr] request = baseurl+CGI.escape(addr) json = URI.open(request){|u| u.read} begin # こんなふう # [{"geometry":{"coordinates":[139.917679,38.992184],"type":"Point"},"type":"Feature","properties":{"addressCode":"","title":"山形県遊佐町豊岡"}}] answer = JSON.parse(json)[0] # 配列で来るようだ rescue STDERR.puts "#{addr}は変換不能" next end coord = answer["geometry"]["coordinates"] geo[addr] = coord sleep 0.5 # 控えめに end # lon, lat = *coord print (row.to_h.values+coord).to_csv # break end end