【メモ】RailsでHot pepperAPIを使って、飲食店を検索できるようにするための試行錯誤
食べ物特化のSNSを作成中です。
投稿作成時や投稿検索時にお店の名前やジャンル、支払い方法でお店を探せるようにしたいと思い、Hot pepperAPIを使うことにしました。ぐるなびAPIの方が登録店舗が多いらしいので、そっち使いたかったけどこの前提供が終了してしまったので、こっちにしました。
参考文献があんまりないので、手探りで頑張って行きたいと思います!やっていくわよ!!
あくまでメモ書き程度なので、あしからず。
そもそもWebAPIってなんなん?って調べていくと
特定のURLにパラメタ付きのリクエストを送ると、欲しいレスポンスが返ってくる。
って感じのものらしい。
API:Application Programming Interfacce
インターフェイス:接点→アプリケーションと連携するための窓口
つまりAPIは外部のアプリケーションと連携するための機能
APIを叩く→APIをツアってデータを取りにいくことをさす。
基本的にJSON形式のテキストが返ってくるらしい
def index
# カッコ内のURLをハッシュのキーとして利用することができる。
例)
p uri.scheme # => "http"
p uri.host # => "www.ruby-lang.org"
p uri.port # => 80
p uri.path # => "/"
uri = URI.parse('https://qiita.com')
# Net::HTTP.newでHTTPのクライアントのオブジェクトを作成
http = Net::HTTP.new(uri.host, uri.port)
#HTTP で SSL/TLS を使うかどうかを設定する。HTTPSを使う場合はtureを設定する。でデフォルトはfalse
http.use_ssl = true
# Net::HTTP::Get.newでGETリクエストのオブジェクトを作成
request = Net::HTTP::Get.new(
'/api/v2/items',
'Authorization' => "Bearer #{Rails.application.credentials.qiita[:token]}"
)
# HTTPクライアントを利用してGETのリクエスト
response = http.request(request)
#
response_json = JSON.parse(response.body)
# レスポンスを簡略化するため、titleプロパティのみ返すようにしている
render json: response_json.map {|item| item.slice('title') }
end
URI.encode_www_formメソッドとは?
#ビューのform_withから送られてきた場合は処理を開始する
if postal_code = params[:postal_code]
#URI.encode_www_formを使ってURLのzipcode=111111のような形に動的にできるようにする
#{zipcode: postal_code}には変数postal_codeに格納されたビューから送られてきた値が入る。
params = URI.encode_www_form({zipcode: postal_code})
#使うAPIのURLを記入し、paramsを展開する
uri = URI.parse("https://zipcloud.ibsnet.co.jp/api/search#{params}")
#レスポンスを取得する
response = Net::HTTP.get_response(uri)
result = JSON.parse(response.body)
#存在しない郵便番号を入力された場合は処理を開始しない
if result["results"]
@zipcode = result["results"][0]["zipcode"]