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

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

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

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

Ruby on Rails

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

API

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

Q&A

解決済

1回答

2404閲覧

railsでyahooのapiを使用する方法

taig

総合スコア4

Ruby on Rails 6

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

Ruby on Rails

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

API

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

0グッド

0クリップ

投稿2021/11/01 08:00

前提・実現したいこと

yahoo!ローカルサーチAPIを使用してwebからの入力値をキーワードとして検索し、結果の一覧を表示する機能をrailsで実装したいと考えています。APIの結果の取得の際にエラーが生じています。

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

JSON::ParserError in RestaurantsController#list 767: unexpected token at '<?xml version="1.0" encoding="utf-8" ?> <Error> <Message> Bad Request: Authentication parameters in your request incompleted. </Message> </Error> ' request = client.get(ENV['YAHOO_URI'], q) @api_params = JSON.parse(request.body) end end

該当のソースコード

def list q = { appid: ENV['YAHOO_API'], query: params[:name], format: 'json' } client = HTTPClient.new request = client.get(ENV['YAHOO_URI'], q) @api_params = JSON.parse(request.body) end

試したこと

他のAPI(RECRUIT API, OpenWetherAPI)では同様の方法で上手く機能しました。
yahooAPIに関しても以下のようにブラウザで直接検索した場合には結果を取得できました。
https://map.yahooapis.jp/search/local/V1/localSearch?appid='key'&query='keyword'&format=json

ご教示いただきますよう、よろしくお願い申し上げます。

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

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

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

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

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

maisumakun

2021/11/01 08:20

「Authentication parameters in your request incompleted.」とありますが、APIキーなどは適切にセットしていますか?
taig

2021/11/01 10:41

maisumakun様 ご返答ありがとうございます。 .envファイル内にて、 YAHOO_API = キー YAHOO_URI = 'https://map.yahooapis.jp/search/local/V1/localSearch' のように設定しています。 キーについては何度も確認をしているのですが、Authentication parameters in your request incompleted となってしまい、解決できていないです。
guest

回答1

0

ベストアンサー

※誤読したので、回答を大きく変えています

diff

1 def list 2 q = { 3 appid: ENV['YAHOO_API'], 4 query: params[:name], 5+ output: 'json' 6- format: 'json' 7 } 8 client = HTTPClient.new 9 10+ request = client.get(ENV['YAHOO_URI'], query: q) 11- request = client.get(ENV['YAHOO_URI'], q) 12 @api_params = JSON.parse(request.body) 13 end

手元の環境で試す感じだと、クエリパラメータをclient.get()に渡す際には名前付きで渡すとうまくいくようでした。
なお、APIドキュメントにもあるのですが、出力フォーマットを変えるのはformatではなくoutputのようです。

別例:

diff

1 def list 2 q = { 3+ 'appid' => ENV['YAHOO_API'], 4+ 'query' => params[:name], 5+ 'output' => 'json' 6- appid: ENV['YAHOO_API'], 7- query: params[:name], 8- format: 'json' 9 } 10 client = HTTPClient.new 11 12 request = client.get(ENV['YAHOO_URI'], q) 13 @api_params = JSON.parse(request.body) 14 end

投稿2021/11/01 08:57

編集2021/11/01 11:32
attakei

総合スコア2738

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

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

taig

2021/11/01 10:42

attakei様 ご回答ありがとうございます。 環境変数について、YAHOO_APIとYAHOO_URIというように異なる変数にしてあります。スペルが似ているため読みづらく、申し訳ございません。 キーについては .envファイル内にて、 YAHOO_API = キー YAHOO_URI = 'https://map.yahooapis.jp/search/local/V1/localSearch' のように設定しています。
taig

2021/11/01 12:28

attakei様 無事、実現したい機能を実装することができました。 ご教授いただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問