前提 解決したいこと
GeolocationAPIとホットペッパーAPIを使って現在地から、セレクトボックスの選択した半径の範囲のお店を検索したい。
#具体的な課題
最も実現したい機能としてはRailsのerbで「ユーザーの現在地情報を取得し、指定した範囲の周辺レストラン情報を一覧表示する」です。
現状わかっていること
1.Geolocation APIを使って現在地の取得をconsole.logで確認することができた。
2.コントローラーで記述したところJson形式でお店の情報を拾うことができた
app/controllers/homes_controller.rb
ruby
1class HomesController < ApplicationController 2 require 'net/http' 3 require 'uri' 4 require 'json' 5 def search 6 key = "自分のAPIKey" 7 lat = '35.658' 8 lng = '139.7016' 9 range = 1 10 api = URI.parse("http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=#{key}&lat=#{lat}&lng=#{lng}&range=#{range}&order=1&format=json") 11 json = Net::HTTP.get(api) 12 @result = JSON.parse(json) 13 end 14end 15
views/homes/search.html.erb
erb
1<%= @result %>
別でrubyファイルを用意して実行してみた
ruby
1require 'net/http' 2require 'json' 3 4# 初期設定 5KEYID = "自分のAPIkey" 6COUNT = 100 7LAT = "35.658" 8LNG = "139.7016" 9FORMAT = "json" 10PARAMS = {"key": KEYID, "count":COUNT, "lat":LAT, "lng":LNG,"format":FORMAT} 11 12def write_data_to_csv(params) 13 restaurants = [["名称","営業日","住所","アクセス","画像"]] 14 uri = URI.parse("http://webservice.recruit.co.jp/hotpepper/gourmet/v1/") 15 uri.query = URI.encode_www_form(PARAMS) 16 json_res = Net::HTTP.get uri 17 18 response = JSON.load(json_res) 19 20 if response == nil or response["results"].has_key?("error") then 21 puts "エラーが発生しました!" 22 end 23 for restaurant in response["results"]["shop"] do 24 rest_info = [restaurant["name"], restaurant["open"], restaurant["address"], restaurant["access"], restaurant["photo"]] 25 puts rest_info 26 restaurants.append(rest_info) 27 end 28 29 File.open("restaurants_list.csv", "w") do |file| 30 file << restaurants 31 end 32 return puts restaurants 33end 34 35write_data_to_csv(PARAMS)
実行結果
ruby
1ディプント Di PUNTO 渋谷駅前店 2月~日、祝日、祝前日: 16:00~翌5:00 (料理L.O. 翌4:00 ドリンクL.O. 翌4:00) 3東京都渋谷区渋谷1-24-16 みずほ銀行遠州屋共同ビルB1F 4渋谷駅前 徒歩1分 5{"mobile"=>{"l"=>"https://imgfp.hotp.jp/IMGH/37/15/P034673715/P034673715_168.jpg", "s"=>"https://imgfp.hotp.jp/IMGH/37/15/P034673715/P034673715_100.jpg"}, "pc"=>{"l"=>"https://imgfp.hotp.jp/IMGH/37/15/P034673715/P034673715_238.jpg", "m"=>"https://imgfp.hotp.jp/IMGH/37/15/P034673715/P034673715_168.jpg", "s"=>"https://imgfp.hotp.jp/IMGH/37/15/P034673715/P034673715_58_s.jpg"}} 6鳥貴族 渋谷西口店 7月~日、祝日、祝前日: 17:00~翌5:00 (料理L.O. 翌4:30 ドリンクL.O. 翌4:30) 8東京都渋谷区道玄坂1-7-1 第一渋観ビル 5F 9JR渋谷駅西口より 徒歩3分/井の頭線渋谷駅 中央口より 徒歩1分 10{"mobile"=>{"l"=>"https://imgfp.hotp.jp/IMGH/29/83/P036032983/P036032983_168.jpg", "s"=>"https://imgfp.hotp.jp/IMGH/29/83/P036032983/P036032983_100.jpg"}, "pc"=>{"l"=>"https://imgfp.hotp.jp/IMGH/29/83/P036032983/P036032983_238.jpg", "m"=>"https://imgfp.hotp.jp/IMGH/29/83/P036032983/P036032983_168.jpg", "s"=>"https://imgfp.hotp.jp/IMGH/29/83/P036032983/P036032983_58_s.jpg"}} 11.....
調べたこと
同じような質問をしている方
こちらのベストアンサーで
Railsで座標情報を受け取ってHotPepperのWebAPIにリクエストするのかと思いますが、
rubyで外部へHTTPリクエストをするGemは有名どころだとHTTPartyやFaradayがあります。
調べましたが、これがあまり良くわからなかったです。
まとめ
Jsonでビューまで表示はできたが、実際に店舗名称 、アクセス 、サムネイル画像を表示させたいです。
あなたの回答
tips
プレビュー