Help us understand the problem. What is going on with this article?

RubyからロケタッチのAPIを利用して住所を正規化する方法

More than 5 years have passed since last update.

漢字交じりの住所をある一定のルールで揃えたいときありますよね。
そんな時は、ロケタッチの住所正規化APIが便利です。

APIの使い方

address引数の値を利用して、結果がJSONで返ります。

https://api.loctouch.com/v1/geo/address_normalize?address=[正規化処理したい住所]
query 入力データ
result.address 正規化後の住所
result.resion_id JSI X 0402 に定められた市区町村コード
result.zip 郵便番号
result.normalize.region 都道府県、郡、市区町村
result.normalize.number 住所の数字部分(一部の住所では数字以外も入る)
result.normalize.build ビル名部分
is_error 正規化失敗した場合は 1 を返す

より詳しい情報はこちら
http://tou.ch/developer/api_all?uri=geo%2Faddress_normalize

実装サンプル

今回は手軽に使えるHTTPクライアント、Faradayを使います。

require "faraday"
require "json"
require "pp"

address = "東京都渋谷区渋谷二丁目21番地-1"
res = Faraday.new(:url => "https://api.loctouch.com").get("/v1/geo/address_normalize", {address: address})
body = JSON.parse(res.body)
pp body

実行すると、このように結果を取得できます。

$ ruby address_normalizer.rb
{"is_error"=>0,
 "query"=>"東京都渋谷区渋谷二丁目21番地-1",
 "code"=>200,
 "result"=>
  {"zip"=>"1500002",
   "region_id"=>"13113",
   "normalize"=>
    {"number"=>"2-21-1", "region"=>"東京都渋谷区", "town"=>"渋谷", "build"=>""},
   "address"=>"東京都渋谷区渋谷2-21-1"}}

便利ですね!

おまけ

次のように、curlコマンドとjqコマンドをセットで利用しても便利です。

$ curl -s "https://api.loctouch.com/v1/geo/address_normalize?address=東京都渋谷区渋谷二丁目21番地-1" | jq '.result'
{
  "zip": "1500002",
  "region_id": "13113",
  "normalize": {
    "number": "2-21-1",
    "region": "東京都渋谷区",
    "town": "渋谷",
    "build": ""
  },
  "address": "東京都渋谷区渋谷2-21-1"
}

$ curl -s "https://api.loctouch.com/v1/geo/address_normalize?address=東京都渋谷区渋谷二丁目21番地-1" | jq '.result.address'
"東京都渋谷区渋谷2-21-1"

併せて読みたい

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away