郵便番号検索APIを触ってみた

以前からAPIを触ってみたいと思いつつ全く触っていなかったのですが、

ようやく触ることができました。




初めてなので簡単そうな郵便番号検索APIを触りました。

参考にした記事はこちらです。



qiita.com

郵便番号検索API - zipcloud






Rubyもあまり経験がないので、ライブラリなど調べながら取り組みました。
自分用のためコメントが多く見づらいかもしれません。

ソースコード

# このプログラムで使うメソッドが組み込みライブラリではないので
#必要なライブラリを読み込む必要がある
# この2つは基本となるのでrequireする

require 'uri' #URIのドメインなどを簡単にとりだすことのできるライブラリー
require 'net/http' #HTTPを扱うライブラリ

# レスポンスがJson形式で返ってくるので、
#それをRubyのオブジェクトに変換するのに必要な外部ライブラリ

require "json"

def get_address(zip_code)

  # 引数を使って postal_code=1111111 のような形をつくる
  #zipcode:郵便番号のリクエストパラメータ名 に引数を指定する
  #URI.encode_www_form:HTML5 で定義されている 
  #application/x-www-form-urlencoded 形式の文字列を生成
  #(URL末尾に渡すクエリパラメータ生成)
  
  query = URI.encode_www_form(zipcode: zip_code)
  puts "query=[#{query}]\n\n"

  # リクエストを送るURIを生成
  uri = URI.parse("https://zipcloud.ibsnet.co.jp/api/search?#{query}")
  puts "uri=[#{uri}]\n\n"

  # 上記のURIに実際にリクエストを送り、返ってくるレスポンスをresponseに格納
  response = Net::HTTP.get_response(uri)
  
  # 返ってきたresponseのbody部分をJSONからRubyのハッシュに変換
  #というように返ってくるのをハッシュに変換
  result = JSON.parse(response.body)
  puts "result=[#{result}]\n\n"

  # 上記までで返ってきたレスポンスがブラウザに表示されているのと同じ状態になっている。
  #あとは返ってきた情報を使うだけ。
  #address3:町域名
  postal_code = result["results"][0]["zipcode"]
  prefecture = result["results"][0]["address1"]
  city = result["results"][0]["address2"]
  region = result["results"][0]["address3"]
 
  puts "郵便番号は#{postal_code}、住所は#{prefecture}#{city}#{region}です"
end

# 上で作成したメソッドを実行
get_address(5456001)


実行結果:


利用したライブラリ詳細:

library net/http (Ruby 3.1 リファレンスマニュアル)

module JSON (Ruby 3.1 リファレンスマニュアル)

URI.encode_www_form (Ruby 3.1 リファレンスマニュアル)




動作環境:
windows10, Replit

メモ:
resultを","で区切ろうと思ったが、文字列ではない(オブジェクト)ので区切れなかった
to_sで文字列にすれば区切れるかと思ったが、試そうとしたところReplitが急に重くなったため中断