質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

1回答

350閲覧

ホットペッパーAPI エラーで表示されない REXML::ParseException Missing end tag for 'hr' (got 'body')

mochi9876

総合スコア0

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2023/06/03 10:58

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • REXML::ParseException
    Missing end tag for 'hr' (got 'body')
    のエラーを解消したい

前提

ホットペッパーAPIで店舗を検索し一覧表示する画面を作りたいです。
rails 6.0.0

発生している問題・エラーメッセージ

REXML::ParseException in Public::ShopsController#search Missing end tag for 'hr' (got 'body') Line: 6 Position: 156 Last 80 unconsumed characters: hash = Hash.from_xml response.body ←shops_controllerのこの行でエラーが起きているようです

該当のソースコード

shops_controller

1class Public::ShopsController < ApplicationController 2 3 def search 4 begin 5 keyword = params[:keyword] 6 7 require 'open-uri' 8 require 'json' 9 require 'active_support' 10 require 'active_support/core_ext' 11 12 uri = "http://webservice.recruit.co.jp/hotpepper/gourmet/v1/" 13 api_key = ENV['API_KEY'] 14 url = uri << "?key=" << api_key << "&hit_per_page=100" << "&keyword=" << URI.encode_www_form_component(keyword) 15 16 uri = URI.parse(url) 17 http = Net::HTTP.new(uri.host, uri.port) 18 request = Net::HTTP::Get.new(uri.request_uri) 19 response = http.request(request) 20 21 22 hash = Hash.from_xml response.body 23 @shops = [] 24 25 if hash.has_key?("results") 26 if hash["results"]["results_available"].to_i > 0 27 hash["results"]["shop"].each do |shop| 28 @shops.push({ 29 id: shop["id"], 30 name: shop["name"], 31 photo: shop["photo"]["pc"]["s"], 32 # url: shop["url"], 33 address: shop["address"], 34 large_area: shop["large_area"]["name"], 35 # station_name: shop["station_name"], 36 # open: shop["open"], 37 # close: shop["close"], 38 # tel: shop["tel"], 39 }) 40 end 41 end 42 else 43 @error = "エラーが発生しました" 44 end 45 end 46 end 47 48end 49

shops/search.html.erb

1<%= form_with url: shops_search_path, local: true, method: :get do |f| %> 2 <%= f.text_field :keyword %> 3 <%= f.submit '検索' %> 4<% end %> 5<%=form_with url: new_post_path, method: :get do |f| %> 6 <% @shops.each do |shop| %> 7 <%= f.radio_button :select_shop, shop[:id] %> 8 <%= f.label :select_shop do %> 9 <%= image_tag shop[:photo] %> 店名:<%= shop[:name] %> : 住所:<%= shop[:address] %> 10 <% end %><br> 11 <% end %> 12 <%= f.submit '決定', class:"btn btn-primary px-4" %> 13<% end %>

試したこと

APIキーの再取得

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

REXML::ParseException in Public::ShopsController#search
Missing end tag for 'hr' (got 'body')
と言われてるのですから、APIキーは無関係でしょう。
shops/search.html.erb には <hr><body>もないのでおそらく layoutに問題がありますね。

<hr>は閉じ</hr>なしで使えますが(htmlでは)XHTMLではだめらしいです。 似たようなことが ホットペッパーAPI 内であるのかも。。 <hr/>にしてみたらどうなります?

投稿2023/06/05 10:11

winterboum

総合スコア23329

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mochi9876

2023/06/05 12:17

ご回答ありがとうございます。 application.html.erbにも<hr>タグが存在しないんです… ホットペッパーAPIから返ってくるデータそのものに</hr>タグが抜けているのでしょうか… <!DOCTYPE html> <html> <head> <title>Harapeko</title> <meta name="viewport" content="width=device-width,initial-scale=1"> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %> </head> <body> <header class="sticky-top"> <%= link_to root_path, class:'display-inline-block' do %> <%= image_tag "logo.png", class:"logo" %> <% end %> <div class="display-inline-block float-right"> <nav class="navbar navbar-expand-md navbar-dark"> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNavDropdown"> <ul class="navbar-nav ml-auto"> <% if admin_signed_in? %> <li><%= link_to "投稿一覧", admin_posts_path, class:"btn btn-light px-4" %></li> <li><%= link_to "会員一覧", admin_users_path, class:"btn btn-light px-4" %></li> <li><%= link_to "タグ管理", admin_tags_path, class:"btn btn-light px-4" %></li> <li><%= link_to "ログアウト", destroy_admin_session_path, method: :delete, class:"btn btn-light px-4" %></li> <% elsif user_signed_in? %> <li> <%= link_to posts_path do %> <i class="fas fa-utensils"></i>タイムライン <% end %> </li> <li> <%= link_to favorite_posts_path do %> <i class="fas fa-heart"></i>お気に入り <% end %> </li> <li> <%= link_to users_my_page_path do %> <i class="fas fa-user-alt"></i>マイページ <% end %> </li> <li> <%= link_to destroy_user_session_path, method: :delete do %> <i class="fas fa-sign-out-alt"></i>ログアウト <% end %> </li> <% else %> <li> <%= link_to users_guest_sign_in_path, method: :post do %> ゲストログイン(閲覧用) <% end %> </li> <li> <%= link_to new_user_registration_path do %> 新規登録 <% end %> </li> <li> <%= link_to new_user_session_path do %> ログイン <% end %> </li> <% end %> </ul> </div> </nav> <%= form_with url: search_posts_path, local: true, method: :get do |f| %> <table align="right"> <tr> <td><%= f.text_field :keyword %></td> <td> <%= f.button :type => "submit" do %> <i class='fas fa-search'></i> <% end %> </td> </tr> </table> <% end %> </div> </header> <main> <%= yield %> </main> <footer> Powered by <a href="http://webservice.recruit.co.jp/">ホットペッパー Webサービス</a> </footer> </body> </html>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問