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

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

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

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

API

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

解決済

railsでhttpsのWEB APIの取得方法

katsun0921
katsun0921

総合スコア0

Ruby on Rails

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

API

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

1回答

0評価

0クリップ

3941閲覧

投稿2017/08/25 13:33

railsでhttpsのapiを取得する機能を作成したいと思っています。
indexのページにデータを取得したいと考えています。
ただ現状だと

use_ssl value changed, but session already started

と表示されてしまいます。この場合どうすればよいでしょうか?
参考にしたサイト
http://jumtech\.hatenablog\.jp/entry/2016/08/20/140720
http://qiita\.com/mogulla3/items/a4bff2e569dfa7da1896

よろしくお願いいたします

controller

require 'net/https' require 'uri' require 'json' require 'logger' before_action :set_product, only: \[:show, :edit, :update, :destroy\] # GET /products # GET /products\.json def index @products = Product\.all \.category_id\(params\[:category_id\]\) \.page\(params\[:page\]\) @order_item = current_order\.order_items\.new # \[ロガー\] # カレントディレクトリのwebapi\.logというファイルに出力 logger = Logger\.new\('\./webapi\.log'\) params = URI\.encode_www_form\({token: '0806af222da69296d9b5869b1374381466ae31f9'}\) uri = URI\.parse\("https://www\.sakenote\.com/api/v1/sakes\?#{params}"\) # @query = uri\.query # \[GETリクエスト\] # Net::HTTP\.startでHTTPセッションを開始する # 既にセッションが開始している場合はIOErrorが発生 response = Net::HTTP\.start\(uri\.host, uri\.port\) do |http| # Net::HTTP\.open_timeout=で接続時に待つ最大秒数の設定をする # タイムアウト時はTimeoutError例外が発生 # http\.open_timeout = 5 # Net::HTTP\.read_timeout=で読み込み1回でブロックして良い最大秒数の設定をする # デフォルトは60秒 # タイムアウト時はTimeoutError例外が発生 # http\.read_timeout = 10 http\.use_ssl = true http\.verify_mode = OpenSSL::SSL::VERIFY_NONE # Net::HTTP#getでレスポンスの取得 # 返り値はNet::HTTPResponseのインスタンス http\.get\(uri\.request_uri\) end begin # \[レスポンス処理\] # 2xx系以外は失敗として終了することにする # ※ リダイレクト対応できると良いな\.\. # # ステータスコードに応じてレスポンスのクラスが異なる # 1xx系 => Net::HTTPInformation # 2xx系 => Net::HTTPSuccess # 3xx系 => Net::HTTPRedirection # 4xx系 => Net::HTTPClientError # 5xx系 => Net::HTTPServerError case response # 2xx系 when Net::HTTPSuccess # \[JSONパース処理\] # JSONオブジェクトをHashへパースする # JSON::ParserErrorが発生する可能性がある @sake = JSON\.parse\(response\.body\) @sakename = JSON\.parse\(response\.body\)\["sakes"\]\[0\]\["sake_name"\] # 3xx系 # when Net::HTTPRedirection # リダイレクト先のレスポンスを取得する際は # response\['Location'\]でリダイレクト先のURLを取得してリトライする必要がある # logger\.warn\("Redirection: code=#{response\.code} message=#{response\.message}"\) # else # logger\.error\("HTTP ERROR: code=#{response\.code} message=#{response\.message}"\) end # \[エラーハンドリング\] # 各種処理で発生しうるエラーのハンドリング処理 # 各エラーごとにハンドリング処理が書けるようにrescue節は小さい単位で書く # \(ここでは全て同じ処理しか書いていない\) rescue IOError => e logger\.error\(e\.message\) rescue TimeoutError => e logger\.error\(e\.message\) rescue JSON::ParserError => e logger\.error\(e\.message\) rescue => e logger\.error\(e\.message\) end end

view

<%= @sakename %>

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails

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

API

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